logo

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

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

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

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

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

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

Scroll
19/06/2025, by Ivan

Drupal-ում SELECT հարցումների մեջ ամենատարածվածն են σταտիկ հարցումները, որոնք օգտագործում են տվյալների բազայի կապի օբյեկտի query() մեթոդը։
Ստատիկ հարցումները գրեթե բառացիորեն փոխանցվում են տվյալների բազային։

Օրինակ՝

$database = \Drupal::database();
$query = $database->query("SELECT id, example FROM {mytable}");
$result = $query->fetchAll();

Շատ պարզ SELECT հարցումների դեպքում պետք է օգտագործել միայն static query() մեթոդը։ Եթե ցանկանում եք ավելի բարդ հարցումներ, դինամիկ հարցումների գեներացիա կամ փոփոխականություն, ապա պետք է օգտագործեք դինամիկ հարցում։

Այս ֆունկցիան չպետք է օգտագործվի պարզ INSERT, UPDATE կամ DELETE հարցումների համար։ Դրանք պետք է իրականացվեն համապատասխանաբար insert(), update() և delete() մեթոդներով։ Քիչ բարդ DELETE հարցումների համար մի քանի աղյուսակների վրա դիտեք բարդ DELETE հարցումները։

Արգումենտներ

Տվյալների բազայի կապի query() մեթոդը ընդունում է երեք արգումենտ՝

  • $query՝ գործարկվող հարցումը։ Պահանջության դեպքում օգտագործեք տեղակիչներ և աղյուսակների անունները նշել փակագծերով։
  • $args՝ տեղակիչների արժեքների զանգված՝ հարցման մեջ փոխարինելու համար։
  • $options՝ պարամետրերի զանգված՝ հարցման աշխատանքի կառավարման համար (ոչ պարտադիր)։

Աղյուսակի անվան նախածանց (prefix)

Ստատիկ հարցումների մեջ աղյուսակների բոլոր անունները պետք է փակվեն ծածկագրված փակագծերով {...}։

Աղյուսակների անունների նման փակումը նշում է համակարգին, որ անհրաժեշտության դեպքում պետք է ավելացվի նախածանցի տող։ Նախածանցը թույլ է տալիս մի քանի կայքեր աշխատացնել մեկ տվյալների բազայից կամ որոշակի աղյուսակներ կիսել կայքերի միջև։ Նշանակում է նաև խուսափել տվյալների արտահոսքից հոստ կայքից դեպի թեստային միջավայրեր։

Տեղակիչներ

Տեղակիչները նշում են, թե որտեղ է տվյալ արժեքը տեղադրվելու հարցման մեջ։ Բաժանելով դրանք հարցումից, թույլ ենք տալիս տվյալների բազային տարբերակել SQL-ի սինտաքսը և օգտվողի տրամադրած արժեքները, ինչի արդյունքում կանխարգելվում են SQL-ի ինժեներական հարձակումները։

$query = $database->query("SELECT id, example FROM {mytable} WHERE created > :created", [
  ':created' => REQUEST_TIME - 3600,
]);

Վերևի կոդը կընտրի բոլոր mytable աղյուսակի id-ները և օրինակները, որոնք ստեղծվել են վերջին մեկ ժամվա ընթացքում (3600 վայրկյան)։ :created տեղակիչը դինամիկ փոխարինվում է REQUEST_TIME - 3600 արժեքով հարցման կատարման պահին։

Հարցումը կարող է ունենալ ցանկացած քանակությամբ տեղակիչներ, բայց բոլորը պետք է ունենան եզակի անուններ, նույնիսկ եթե արժեքները նույնն են։ Տեղակիչների զանգվածը կարող է լինել ուղղակի ներառված կամ նախօրոք կազմված և փոխանցված։ Զանգվածի կարգը նշանակություն չունի։

«db_» նախածանցով տեղակիչները վերապահված են համակարգի ներսի օգտագործման համար և երբեք չպետք է օգտագործվեն բացահայտ։

Ուշադրություն դարձրեք, որ տեղակիչները չպետք է լինեն մեջբերումներում կամ կոտրածական նշաններով, անկախ դրանց տեսակից։ Չափաքանակային տվյալները տրվում են տվյալների բազային առանձին, ուստի այն տարբերակումը կատարում է ինքնուրույն։

// ՍՈՒՐԲԱՀԱՏՈՒԹՅՈՒՆ (':type' տեղակիչը մեջբերումներում)
$result = $database->query("SELECT example FROM {mytable} WHERE type = ':type'", [
  ':type' => 'mytype',
]);

// ՃԻՇՏ ( ':type' տեղակիչը առանց մեջբերումների)
$result = $database->query("SELECT example FROM {mytable} WHERE type = :type", [
  ':type' => 'mytype',
]);

Տեղակիչները չեն կարող օգտագործվել սյունակի կամ աղյուսակի անվան համար։ Եթե դրանք ստացվել են անապահով մուտքից, պետք է անցնեն $database->escapeTable() մեթոդով։

Տեղակիչ-զանգվածներ

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

Օրինակ՝

$result = $database->query("SELECT * FROM {mytable} WHERE id IN (:ids[])", [':ids[]' => [13, 42, 144]]);

Հաջորդ երկու արտահայտությունները հավասարազոր են վերևի օրինակին՝

$result = $database->query("SELECT * FROM {mytable} WHERE id IN (:ids_1, :ids_2, :ids_3)", [
  ':ids_1' => 13, 
  ':ids_2' => 42, 
  ':ids_3' => 144,
]);

$result = $database->query("SELECT * FROM {mytable} WHERE id IN (13, 42, 144)");

Հարցումների տարբերակներ

query() մեթոդի երրորդ արգումենտը՝ options զանգվածը, սահմանում է հարցման վարքագիծը։ Շատ դեպքերում օգտագործվում են միայն երկու պարամետրեր։ Մյուս արժեքները հիմնականում ներսի օգտագործման համար են։

"target" բանալին նշում է տվյալների աղբյուրը։ Եթե չի նշված, օգտագործվում է «default»։ Այժմ մյուս թույլատրելի արժեքը «replica»-ն է՝ նշելու համար, որ հարցումը պետք է իրականացվի կրկնօրինակ սերվերին, եթե առկա է։

"fetch" բանալին սահմանում է, թե ինչպես կստացվեն հարցման վերադարձված տվյալները։ Ընդունելի արժեքներ են՝ PDO::FETCH_OBJ, PDO::FETCH_ASSOC, PDO::FETCH_NUM, PDO::FETCH_BOTH կամ դասի անունը որպես տող։ Եթե նշվում է դասի անունը, յուրաքանչյուր արդյունք կստեղծվի որպես այդ դասի նոր օբյեկտ։ Այլ արժեքների դեպքում PDO-ն վերադարձնում է տվյալները համապատասխան ձևաչափերով։ Նայեք http://php.net/manual/en/pdostatement.fetch.php։ Նախնականը PDO::FETCH_OBJ է, և խորհուրդ է տրվում օգտագործել առանց հատուկ պատճառի։

Հաջորդ օրինակում հարցումը կատարվում է կրկնօրինակ սերվերին (եթե հասանելի է), և արդյունքները վերցվում են որպես ասոցիատիվ զանգված։

$result = $database->query("SELECT id, example FROM {mytable}", [], [
  'target' => 'replica',
  'fetch' => PDO::FETCH_ASSOC,
]);

query() մեթոդի վերադարձրած արդյունքի օբյեկտը կարելի է օգտագործել վերադարձված տողերը առանձին ստանալու համար։ Հաջորդ օրինակում $result-ը պարունակում է բոլոր վերադարձված տողերը, իսկ fetchAssoc() մեթոդով դրանք հանվում են հերթով $row փոփոխականի մեջ։

$sql = "SELECT name, quantity FROM goods WHERE vid = :vid";
$result = $database->query($sql, [':vid' => $vid]);
if ($result) {
  while ($row = $result->fetchAssoc()) {
    // Կարող եք անել հետևյալով՝
    // $row['name']
    // $row['quantity']
  }
}

Բարդ DELETE հարցումներ

Ստատիկ հարցումը հեշտ և կարճ ձև է արտահայտելու մեկ արտահայտությամբ միաժամանակ մի քանի աղյուսակներից տվյալներ ջնջելու համար։

Օրինակ՝

$database = \Drupal::database();
$database->query("DELETE {table1}, {table2} FROM {table1} INNER JOIN {table2} ON {table1}.id = {table2}.id WHERE {table1}.id=:recno", [":recno" => 2]);

(Ջնջում է տողը ինչպես table1, այնպես էլ table2 աղյուսակներից)

Source URL:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.