Ընդհանուր հասկացություններ
Drupal-ի տվյալների բազայի շերտը կառուցված է PHP-ի PDO գրադարանի հիման վրա։ PDO-ն տրամադրում է միատեսակ օբյեկտա-կենտրոնացված API տարբեր տվյալների բազաներ մուտք գործելու համար, սակայն չի ապահովում SQL-ի տարբեր բազաների մեջ օգտագործվող դիալեկտների անաբստրակցիա։
Դրայվերներ
Քանի որ տարբեր տվյալների բազաներ պահանջում են տարբեր փոխգործակցության ձևեր, Drupal-ի տվյալների բազայի շերտը պահանջում է յուրաքանչյուր տվյալների բազայի տիպի համար համապատասխան դրայվեր։ Դրայվերը բաղկացած է ֆայլերի շարքից, որոնք գտնվում են include/database/driver թղթապանակում, որտեղ driver-ը դրսևորում է այս դրայվերի եզակի բանալին։ Շատ դեպքերում դրայվերի բանալին տվյալների բազայի անվան փոքրատառ տարբերակն է, օրինակ՝ «mysql», «pgsql» կամ «mycustomdriver»։
Յուրաքանչյուր դրայվեր բաղկացած է մի քանի դասերից, որոնք ժառանգում են տվյալների բազայի հիմնական համակարգի ծնողական դասերից։ Դրայվերին հատուկ դասերը կարող են վերագրավել ցանկացած պահվածք, որը անհրաժեշտ է տվյալ տվյալների բազայի տեսակը ճիշտ աջակցելու համար։ Դրայվերին հատուկ դասերի անունները միշտ կոչվում են ծնողական դասի անվան և դրայվերի անունից բաղկացած՝ ստորակետով բաժանված։ Օրինակ՝ MySQL-ի համար InsertQuery դասը կոչվում է InsertQuery_mysql։
Կապեր
Կապը DatabaseConnection դասի օբյեկտ է, որը ժառանգվում է PDO դասից։ Drupal-ին միացած յուրաքանչյուր տվյալների բազայի հետ կապված է մեկ կապի օբյեկտ։ Այս կապի օբյեկտը պետք է ենթադասավորվի յուրաքանչյուր դրայվերի համար առանձնացված դասերին։
Կապի օբյեկտին մուտք գործելու (և անհրաժեշտության դեպքում բացելու) համար օգտագործեք՝
$database = \Drupal::database(); // Կամ $database = \Drupal::service('database');
Եթե ծառայությունները դեռ հասանելի չեն, \Drupal\Core\Database\Database::getConnection() կարող է ստանալ տվյալների բազայի կապը։
Կապի բանալիին և նպատակին առնչվող լրացուցիչ տեղեկությունների համար նայեք Տվյալների բազայի կոնֆիգուրացիայի էջը։
Ընթացիկ ակտիվ կապին մուտք գործելու համար օգտագործեք՝
$conn = \Drupal\Core\Database\Database::getConnection();
Սա կվերադարձնի ակտիվ կապի ստանդարտ նպատակն՝ «default»-ը։
Նշեք, որ մեծ մասում դեպքերի ձեզ հարկավոր չէ ուղղակիորեն պահանջել կապի օբյեկտը։ Փոխարենը պրոցեդուրալ ոճի օղակները դա կանեն ձեր փոխարեն։ Միակ դեպքը, երբ կարող է անհրաժեշտ լինել ուղղակի մուտք ունենալ կապի օբյեկտին, այն է, եթե դուք անում եք բարդ աշխատանք մի քանի տվյալների բազաների հետ և չեք ցանկանում փոխել ակտիվ տվյալների բազան։
Ակտիվ կապը կարգավորելու համար օգտագործեք՝
$conn = \Drupal\Core\Database\Database::setActiveConnection('external');
Լրացուցիչ տեղեկությունների համար, ինչպիսիք են կապի բանալիները և նպատակները, տես հաջորդ բաժինը՝ Տվյալների բազայի կոնֆիգուրացիա։
Հարցումներ
Հարցումը SQL հրամանն է, որը ուղարկվում է տվյալների բազայի կապին։ Տվյալների բազայի համակարգը աջակցում է վեց տեսակի հարցումներ՝ σταտիկ, դինամիկ, insert, update, delete և merge։ Որոշ հարցումներ գրվում են որպես SQL տեքստի ձևանմուշներ (պատրաստված հարցումներ), իսկ մյուսները օգտագործում են օբյեկտա-կենտրոնացված հարցումների ստեղծողներ։ «Հարցման օբյեկտ» տերմինը վերաբերում է այդ տարբեր հարցումների ստեղծողների օրինակներին։
Հայտարարություններ
Հայտարարության օբյեկտը հարցման ընտրության արդյունք է։ Այն միշտ կլինի DatabaseStatement տիպի կամ դրա ենթադասի օբյեկտ։ DatabaseStatement-ը ընդլայնում է PDOStatement դասը։
Drupal-ն օգտագործում է պատրաստված հայտարարություններ բոլոր հարցումների համար։ Պատրաստված հայտարարությունը հարցման ձևանմուշ է, որի մեջ կտեղադրվեն իրական արժեքները հարցման կատարման ժամանակ։ Կարելի է պատկերացնել պատրաստված հայտարարությունը որպես SQL ֆունկցիայի համարժեք, որը կանչվում է համապատասխան պարամետրերով։
Սովորական PDO-ում պետք է բացատրել հայտարարության օբյեկտը և այնուհետև կատարել այն՝ կապված արժեքներով տեղակիչների հետ, հետո հայտարարությունը կարող է կրկնվել որպես արդյունքների հավաքածու։ Իրականում հայտարարությունը և արդյունքների հավաքածուն համարժեք են, երբ հայտարարությունը կատարված է։
Drupal-ը չցուցադրում է պատրաստված հայտարարությունը ուղիղ։ Փոխարենը, մոդուլի ծրագրավորողը օգտագործում է հարցման օբյեկտ կամ SQL տող՝ հարցումը կատարելու համար, և վերադարձվում է հայտարարության օբյեկտը։ Այսպիսով, «հայտարարության օբյեկտ» և «արդյունքների հավաքածուի օբյեկտ» տերմինները ավելի շատ համարժեք են։
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.