9.13. Աշխատանք տվյալների բազայի հետ Drupal-ում
Սա տարածված դեպք է Drupal մոդուլների մշակման ընթացքում։ Պետք է օգտագործել entityQuery, որտեղ հնարավոր է, սակայն որոշ դեպքերում անհրաժեշտ է օգտագործել SQL հարցումներ՝ ավելի բարդ տվյալներ ստանալու համար։
Դուք կարող եք այս էջը ավելացնել էջանիշերում՝ որպես հիշեցում MySQL հարցումներ (select, insert, update, delete) կատարելու ձևի մասին Drupal-ում։
Select
Ստանալ մեկ արժեք՝
$query = \Drupal::database()->select('node_field_data', 'n');
$query->addField('n', 'nid');
$query->condition('n.title', 'About Us');
$query->range(0, 1);
$nid = $query->execute()->fetchField();
Ստանալ արդյունքը զանգվածում՝
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->range(0, 1);
$vegetable = $query->execute()->fetchAssoc();
Կարող եք օգտագործել նաև ->fetchObject(), ->fetchAll()՝ արդյունքը օբյեկտով ստանալու համար։
LIKE օգտագործում հարցման մեջ՝
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE');
$vegetable = $query->execute()->fetchAllKeyed();
Select հարցում՝ օգտագործելով JOIN՝
$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->addField('u', 'name');
$query->join('users_field_data', 'u', 'u.uid = n.uid');
$query->condition('n.type', 'page');
$vegetable = $query->execute()->fetchAllAssoc('nid');
Ստորև ներկայացված են այլ տվյալների բազայի հարցումների օրինակներ՝ insert, update, upsert և delete։ Այս հարցումները օգտակար են հատուկ աղյուսակների հետ աշխատելիս։ Բայց խորհուրդ է տրվում օգտագործել Drupal API կամ contrib մոդուլներ։ Եթե միևնույնն է որոշել եք օգտագործել հատուկ SQL հարցումներ, ապա դիտեք հետևյալ օրինակները՝
Insert
$query = \Drupal::database()->insert('flood');
$query->fields([
'event',
'identifier'
]);
$query->values([
'My event',
'My indentifier'
]);
$query->execute();
Դուք կարող եք կանչել values() մի քանի անգամ՝ միաժամանակ մի քանի գրառում ավելացնելու համար։
Update
$query = \Drupal::database()->update('flood');
$query->fields([
'identifier' => 'My new identifier'
]);
$query->condition('event', 'My event');
$query->execute();
Upsert
$query = \Drupal::database()->upsert('flood');
$query->fields([
'fid',
'identifier',
]);
$query->values([
1,
'My indentifier for upsert'
]);
$query->key('fid');
$query->execute();
key() մեթոդը պետք է օգտագործել՝ նշելու համար դաշտի անունը, որի հիման վրա պետք է որոշվի՝ արդյոք գրառումը գոյություն ունի։ Դուք կարիք չունեք օգտագործելու condition(), քանի որ key() մեթոդը դրա փոխարենն է։ Այդ դաշտը պետք է լինի եզակի՝ օրինակ՝ nid, uid, tid, fid կամ այլ ID դաշտեր։ Եթե key()-ում նշված արժեքը գոյություն չունի, ապա կկատարվի նոր գրառման ավելացում։
Delete
$query = \Drupal::database()->delete('flood');
$query->condition('event', 'My event');
$query->execute();
Ահա այսքանն է։ Եթե ձեզ անհրաժեշտ են ավելի շատ օրինակներ, գրեք մեկնաբանություններում։ Հաջորդ դասերում կդիտարկենք՝ ինչպես կիրառել այս հատուկ հարցումները պրակտիկայում։