Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll

Աշխատանք տվյալների բազայի հետ Drupal 7-ում - Դաս 8 - Հարցումների ներմուծում (INSERT INTO)

12/05/2025, by Ivan

Տեղադրման հարցումները միշտ պետք է իրականացվեն հարցումների կոնստրուկտորի միջոցով։ Որոշ տվյալների բազաներ պահանջում են հատուկ մշակման եղանակներ LOB (Large Object, օրինակ՝ MySQL-ում տեքստ) և BLOB (Binary Large Object) դաշտերի համար, այդ պատճառով անհրաժեշտ է աբստրակցիայի մակարդակ, որպեսզի յուրաքանչյուր տվյալների բազայի (ԴԲ) վարորդ կարողանա իրականացնել համապատասխան մշակման մեթոդները։

Տեղադրման հարցումը սկսվում է db_insert() ֆունկցիայի օգտագործմամբ՝

<?php
$query = db_insert('node', $options);
?>

Այս հարցումը ստեղծում է հարցման օբյեկտ, որը կտեղադրի մեկ կամ մի քանի գրառում node աղյուսակում։ Ուշադրություն դարձրեք, որ աղյուսակների անունները գրելու անհրաժեշտություն չկա՝ կուրծքանշաններով, քանի որ կոնստրուկտորը դա կառավարում է ինքնուրույն։

Տեղադրման հարցումները օգտագործում են շղթայված (fluent) API, այսինքն՝ բոլոր մեթոդները, ներառյալ execute()-ը, վերադարձնում են նույն օբյեկտը՝ հնարավորություն տալով մեթոդները շղթայաբար կիրառել։

Կարճ գրառում (Compact form)

Նախընտրելի ձեւ մեծ մասի համար՝

<?php
$nid = db_insert('node')
  ->fields(array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ))
  ->execute();
?>

Սա հավասարազոր է հետևյալ SQL հարցմանը՝

INSERT INTO {node} (title, uid, created) VALUES ('Example', 1, 1221717405);

fields() մեթոդը ընդունում է ասոցիատիվ զանգված, որտեղ բանալիները աղյուսակի դաշտերն են, իսկ արժեքները՝ տվյալները։

execute()-ը՝ ի տարբերություն այլ մեթոդների, վերադարձնում է ավտոաճող դաշտի (օր.՝ nid) արժեքը։ Եթե նման դաշտ չկա, վերադարձվող արժեքին չպետք է վստահել։

Պարզեցված ձև (Degenerate form)

<?php
$nid = db_insert('node')
  ->fields(array('title', 'uid', 'created'))
  ->values(array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ))
  ->execute();
?>

Եթե fields() ընդունում է ցուցակ, ապա values()-ում պետք է ապահովել նույն հերթականությունը։ Բայց եթե values()-ում օգտագործվում է ասոցիատիվ զանգված, ապա կարգը կարևոր չէ։ Այս ձևն օգտագործվում է multi-insert հարցումների դեպքում։

Multi-insert հարցում (Multiple row insert)

Կարող եք միաժամանակ մի քանի արժեքներ տեղադրել՝ values() կոչելով մի քանի անգամ։ Օրինակ՝

<?php
$values = array(
  array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 2',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 3',
    'uid' => 2,
    'created' => REQUEST_TIME,
  ),
);
$query = db_insert('node')->fields(array('title', 'uid', 'created'));
foreach ($values as $record) {
  $query->values($record);
}
$query->execute();
?>

Սա կկատարի երեք տեղադրում մեկ հարցման մեջ՝ ապահովելով արագություն և արդյունավետություն։ Բայց execute()-ը այս դեպքում չի վերադարձնում վստահելի արժեք։

Տեղադրում՝ հիմնված SELECT հարցման վրա (INSERT INTO ... SELECT)

Երբ ցանկանում եք լրացնել աղյուսակ SELECT-ի արդյունքով, կարող եք օգտագործել հետևյալ ձևը (Drupal 7)՝

<?php
$query = db_select('node', 'n');
$query->join('users', 'u', 'n.uid = u.uid');
$query->addField('n','nid');
$query->addField('u','name');
$query->condition('type', 'page');

db_insert('mytable')
  ->from($query)
  ->execute();
?>

Սա կատարում է՝ INSERT INTO mytable (nid, name) SELECT ...

Լռելյայն արժեքներ (Defaults)

Եթե ցանկանում եք հարկադրել որոշ դաշտերի համար օգտագործել տվյալների բազայի լռելյայն արժեքները, կարող եք գրել՝

<?php
$query->useDefaults(array('field1', 'field2'));
?>

Սա կստիպի, որ field1 և field2 դաշտերի համար օգտագործվեն աղյուսակի լռելյայն արժեքները։ Եթե փորձեք միևնույն դաշտը և fields()/values()-ում, և useDefaults()-ում նշել, կստանաք սխալ։