Տվյալների բազայի կապի օբյեկտի ստեղծում
Տվյալների բազայի հետ փոխգործակցությունը պետք է իրականացվի տվյալների բազայի կապի օբյեկտի միջոցով։ Կա մի քանի դեպք, որոնք պահանջում են հատուկ ուշադրություն՝
1. Պրոցեդուրալ կոդում, այսինքն *.module, *.inc կամ սցենարային ֆայլերում:
Տվյալների բազայի կապի օբյեկտի օրինակ ստեղծելու լավագույն եղանակը Service Container-ի միջոցով է։
Օրինակ՝
$database = \Drupal::database(); // Կամ $database = \Drupal::service('database');
Սա կհանգեցնի տվյալների բազայի կապի օբյեկտին, որը կարգավորված է հիմնական տվյալների բազայի հետ կապ հաստատելու համար, ինչպես սահմանված է settings.php կոնֆիգուրացիոն ֆայլում։
2. Պատմական և տեխնիկական պատճառներով \Drupal::database() մեթոդի վերադարձվող տիպը \Drupal\Core\Database\Connection է, ուստի այն երբեմն կոչվում է $connection։
3. OOP կոդում՝
- Մի շարք դեպքերում տվյալների բազայի կապի օբյեկտը կարող է արդեն հասանելի լինել որպես ընթացիկ դասի անդամ։ Օրինակ՝ շատ պլագիններ և ծառայություններ ունեն $this->database (կամ $this->connection)՝ որպես տվյալների բազայի կապի օբյեկտ։
- Եթե հնարավոր է, օգտագործեք Դեպենդենսի Ինջեկշն (DI)՝ օգտագործելու համար @database ծառայությունը կամ $container->get('database')՝ տվյալների բազայի կապը ներառելու համար։
- Եթե դա հնարավոր չէ (օրինակ՝ դասի σταտիկ մեթոդում), օգտագործեք \Drupal::database()։
- Եթե ծառայությունները դեռ հասանելի չեն, \Drupal\Core\Database\Database::getConnection() կարող է ստանալ տվյալների բազայի կապը։
- Մոդուլային թեստերում չունենք բեռնված կոր կամ ներառված կոնտեյներ։ Մոդուլային թեստերը սովորաբար չպետք է դիմեն տվյալների բազային։ Թեստը, որն ունի տվյալների բազայի ծառայության պահանջ, պետք է փոխակերպվի կորի թեստի։
- Կորի դասերում և ֆունկցիոնալ թեստերում ունենք $this->container->get('database')։ Որոշ թեստերի հեղինակներ կարող են հայտնաբերել, որ թեստի դասի կողմից նշված կոնտեյները չի համաժամացվի ընթացիկ կոնտեյների հետ ֆունկցիոնալ թեստի ընթացքում։ Այդ դեպքում թեստի հեղինակը կարող է կանչել $this->rebuildContainer() և ապա կրկին օգտվել $this->container->get('database')։
Տվյալների բազայի այլ կապի օգտագործում
Եթե ձեր կայքը օգտագործում է մի քանի տվյալների բազաներ, և ցանկանում եք հարցում կատարել ստանդարտից տարբեր տվյալների բազայի վրա, օգտագործեք Database::getConnection()։ Օրինակ՝
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
Սա կապ կստեղծի settings.php ֆայլում հետևյալով սահմանված տվյալների բազայի հետ՝
$databases['other_database']['default']
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.