Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

9.13. Աշխատանք տվյալների բազայի հետ Drupal-ում

19/04/2025, by Ivan

Menu

Սա տարածված դեպք է 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();

Ահա այսքանն է։ Եթե ձեզ անհրաժեշտ են ավելի շատ օրինակներ, գրեք մեկնաբանություններում։ Հաջորդ դասերում կդիտարկենք՝ ինչպես կիրառել այս հատուկ հարցումները պրակտիկայում։