Աշխատանք տվյալների բազայի հետ Drupal 7-ում - Դաս 12 - Հարցման պայմաններ (WHERE, HAVING, LIKE)
Հարցման պայմանները թույլ են տալիս ընտրել միայն այն գրառումները, որոնք համապատասխանում են որոշակի սահմանափակումներին, օրինակ՝ երկու շաբաթից ավելի վաղ չստեղծված նոդերը, կամ տերմինները, որոնցում կա "դրուպալ" բառը։ SQL-ում մենք օգտագործում ենք WHERE և HAVING՝ սահմանափակումներ կիրառելու համար SELECT, UPDATE, DELETE հարցումների վրա։ Դինամիկ հարցումներում ևս իրականացված է պայմանների հետ աշխատելու մեխանիզմ։ Այս մեխանիզմը նույն կերպ է աշխատում բոլոր երեք տեսակի հարցումների համար՝ SELECT, UPDATE, DELETE։
Պայմանական արտահայտությունների հայեցակարգ
Պայմանը պարունակվում է հատուկ արտահայտության մեջ, որը սահմանում է սահմանափակումը։
Միավորում (AND, OR)
Յուրաքանչյուր պայման կարող է բաղկացած լինել մի քանի արտահայտություններից, որոնք միացվում են միմյանց հետ։ Պայմանները միացվում են AND (ԵՎ) և OR (ԿԱՄ) օպերատորների միջոցով։
Պայմանի օբյեկտ
Drupal-ը ներկայացնում է յուրաքանչյուր պայման որպես QueryConditional դասի օրինակ։ Պայմանի օբյեկտը այս դասի օրինակ է։
Օրինակ SQL հարցում․
SELECT FROM {mytable} WHERE (a = 1 AND b = 'foo' OR (c = 'bar'))
Պայմանի արտահայտություն․
WHERE (a = 1 AND b = 'foo' OR (c = 'bar'))
Պայմանի մասեր․
(a = 1 AND b = 'foo' OR (c = 'bar'))
(c = 'bar')
Միացման օպերատորներ՝
AND, OR
SELECT, UPDATE, DELETE հարցումների օբյեկտները իրականցվում են QueryConditionalInterface դասի միջոցով, որը տրամադրում է պայմանների հետ աշխատելու միջերես։
API
Երկու հիմնական մեթոդ կա՝
$query->condition($field, $value = NULL, $operator = '=')
condition() մեթոդը թույլ է տալիս սահմանել դաշտը, արժեքը և համեմատման օպերատորը։ Օրինակ՝ =, <, >=, LIKE և այլն։ Լռելյայն օգտագործվում է =։
$query->where($snippet, $args = array())
where() մեթոդը թույլ է տալիս գրել ուղղակի SQL արտահայտություն և փոխարինման արժեքներ։
Ցանկալի է condition() օգտագործել where()-ի փոխարեն։
Պայմաններ զանգվածներով
$query->condition('myfield', array(1, 2, 3), 'IN');
Ստեղծում է՝ myfield IN (:placeholder_1, :placeholder_2, :placeholder_3)
$query->condition('myfield', array(5, 10), 'BETWEEN');
Ստեղծում է՝ myfield BETWEEN :placeholder_1 AND :placeholder_2
Բովանդակված (nested) պայմաններ
condition() կարող է ընդունել այլ պայմանների օբյեկտներ։ Օրինակ՝
$query ->condition('field1', array(1, 2), 'IN') ->condition(db_or()->condition('field2', 5)->condition('field3', 6));
Կստացվի՝
(field1 IN (...) AND (field2 = ... OR field3 = ...))
NULL արժեքներ
$query->isNull('myfield'); $query->isNotNull('myfield');
Ուշադրություն․ condition('myfield', NULL) այլևս չի օգտագործվում, փոխարենը օգտագործեք isNull() կամ isNotNull()։
Ենթահարցում (Subquery)
db_delete('sessions') ->condition('timestamp', REQUEST_TIME - $lifetime, '') ->execute();
db_update('sessions') ->fields(['sid' => session_id()]) ->condition('sid', $old_session_id) ->execute();
$or = db_or()->condition('tid1', 5)->condition('tid2', 6); db_delete('term_relation')->condition($or)->execute();