Articles

Յուրաքանչյուր հարցում կարող է ունենալ համապատասխան «քանակի հարցում»: Քանակի հարցումը վերադարձնում է տողերի քանակը սկզբնական հարցման արդյունքներում: Կարգավիճակ select հարցման օբյեկտից (որը իրականացնում է SelectInterface) քանակի հարցում ստանալու համար օգտագործեք countQuery() մեթոդը։


Որոշ SQL հարցումներ կարող են վերադարձնել կրկնվող արդյունքներ։ Նման դեպքերում կրկնվող տողերը կարելի է զտել օգտագործելով «DISTINCT» բանալին στατικό հարցման մեջ։ Դինամիկ հարցման դեպքում օգտագործեք distinct() մեթոդը։


Նշված դաշտով խմբավորման համար օգտագործեք groupBy() մեթոդը։
$query->groupBy('uid');
Վերը նշված կոդը կասի հարցմանը խմբավորել տվյալները uid դաշտով։ Խնդրում ենք նկատի ունենալ, որ դաշտի անունը պետք է լինի addField() կամ addExpression() մեթոդներով ստեղծված պսևդոնիմ, ուստի շատ դեպքերում ցանկալի է օգտագործել այդ մեթոդների վերադարձված արժեքները, որպեսզի համոզվեք ճիշտ պսևդոնիմ է օգտագործվում։
Դաշտով, օրինակ՝ uid, խմբավորված տողերի քանակ ստանալու համար կարող եք անել հետևյալը.


Դինամիկ հարցման մեջ WHERE պայման ավելացնելու համար օգտագործեք condition() մեթոդը՝
$query->condition('bundle', 'article', '=');
Վերը նշված կոդը հրահանգում է հարցման արդյունքները զտել՝ ընտրելով միայն «article» փաթեթի գրառումները։ Հիշեք, որ դաշտի անունը պետք է լինել այն անվանումը, որը ստեղծվել է addField() կամ addExpression() մեթոդներով։
Condition մեթոդի պարամետրերը
condition() մեթոդը ընդունում է երեք պարամետր՝


Select հարցումը միշտ վերադարձնում է արդյունքների հավաքածուի օբյեկտ, որը պարունակում է զրո կամ ավելի գրառումներ։ Կան մի քանի եղանակներ տվյալները ստանալու համար՝ կախված օգտագործման սցենարից։ Գրառումները ըստ լռության դուրս են բերվում որպես օբյեկտներ, եթե չեք փոխել դուրսբերման ռեժիմը (տես՝ setFetchMode)
Հաճախ օգտագործվող դեպքն է արդյունքների հավաքածուի շրջանցումը foreach() ցիկլի միջոցով։


Հարցումները կարելի է հանել օբյեկտների՝ հիմնվելով օգտագործողի դասերի վրա: Օրինակ, եթե ունենք դաս՝ ExampleClass անունով, ապա հետևյալ հարցումը կվերադարձնի exampleClass տեսակի օբյեկտներ։
$result = $connection->query("SELECT id, title FROM {example_table}", [], [ 'fetch' => 'ExampleClass', ]);
Եթե դասում կա __construct() մեթոդ, ապա օբյեկտները կստեղծվեն, հատկությունները կավելացվեն օբյեկտին, և ապա կկանչվի __construct() մեթոդը: Օրինակ, եթե ունեք հետևյալ դասն ու հարցումը։


Ներդրման հարցումները միշտ պետք է օգտագործեն հարցումների կառուցողի օբյեկտը։ Որոշ տվյալների բազաներում պահանջվում է հատուկ LOB (Large OBject, օրինակ՝ TEXT MySQL-ում) և BLOB (Binary Large OBject) դաշտերի մշակման մեխանիզմ, ուստի անհրաժեշտ է աբստրակցիայի մակարդակ, որպեսզի տվյալների բազայի տարբեր դրայվերներ կարողանան իրականացնել իրենց հատուկ մշակումը։
Ներդրման հարցումները սկսվում են insert() մեթոդի միջոցով հետևյալ կերպ.


Սինթեզման հարցումները հանդիսանում են հիբրիդային հարցումների հատուկ տեսակ: Չնայած դրանց սինթաքսը սահմանված է SQL 2003 սպեցիֆիկացիայում, բայց գրեթե որևէ տվյալների բազա չի աջակցում ստանդարտ սինթաքսը: Այնուամենայնիվ, դրանց մեծամասնությունը տրամադրում է այլընտրանքային իրականացում՝ տվյալների բազային հատուկ սինթաքսի միջոցով: Drupal-ում սինթեզման հարցումների կառուցողը այս հասկացությունը բերում է կառուցվածքային օբյեկտի, որը կարող է կոմպիլացվել համապատասխան սինթաքսով յուրաքանչյուր տվյալների բազայի համար: Դրանք երբեմն կոչվում են "UPSERT" հարցումներ, որոնք UPDATE և INSERT-ի համադրման արդյունք են։


Հեռացման հարցումները միշտ պետք է օգտագործեն հարցման կառուցողի օբյեկտը։ Դրանք կատարվում են delete() մեթոդով հետևյալ կերպ․
$query = $connection->delete('mytable', $options);
Սա ստեղծում է հեռացման հարցման օբյեկտ, որը ջնջում է գրառումները mytable աղյուսակից։ Նշեք, որ աղյուսակի անունը փակագծերի մեջ գրել չի պահանջվում, քանի որ հարցման կառուցողը ավտոմատ կերպով կկառավարի դա։


Drupal-ն նույնպես աջակցում է տրանզակցիաներին՝ ներառյալ թափանցիկ պահուստային տարբերակ այն տվյալների բազաների համար, որոնք չեն աջակցում տրանզակցիաներին։ Սակայն տրանզակցիաները կարող են բավական բարդ լինել, եթե փորձեք միաժամանակ գործարկել երկու տրանզակցիա։ Այս դեպքի վարքը կախված է տվյալների բազայի տեսակից։
