Pravljenje objekta konekcije sa bazom podataka
Interakcija sa bazom podataka treba da se obavlja preko objekta konekcije sa bazom podataka. Postoji nekoliko scenarija koji zahtevaju posebnu pažnju:
1. U proceduralnom kodu, tj. *.module, *.inc ili skript fajlovima:
Najbolji način za kreiranje instance objekta konekcije sa bazom podataka je putem Service Container-a.
Primer:
$database = \Drupal::database(); // Ili $database = \Drupal::service('database');
Ovo će vratiti objekat konekcije sa bazom podataka, koji je podešen za konekciju na podrazumevanu glavnu bazu podataka, kako je definisano u konfiguraciji baze podataka u fajlu settings.php.
2. Iz istorijskih i tehničkih razloga, tip koji vraća \Drupal::database() je \Drupal\Core\Database\Connection, i zato se ponekad naziva $connection.
3. U OOP kodu:
- U nekim slučajevima, objekat konekcije sa bazom podataka može već biti dostupan kao član trenutne klase; na primer, mnogi plugini i servisi imaju $this->database (ili $this->connection) - objekat konekcije sa bazom podataka kao član.
- Ako je moguće, koristite DI (Dependency Injection) za korišćenje servisa @database ili $container->get('database'); za unošenje konekcije sa bazom podataka.
- Ako to nije moguće (kao u statičkoj metodi klase), koristite \Drupal::database().
- Ako servisi još nisu dostupni, \Drupal\Core\Database\Database::getConnection() može da vrati konekciju sa bazom podataka.
- U modulskim testovima nemamo učitano jezgro niti ugrađeni kontejner. Modularni testovi obično ne bi trebalo da pristupaju bazi podataka. Modularni test koji zahteva servis baze podataka treba da se konvertuje u kernel test.
- U klasama jezgra i funkcionalnim testovima imamo $this->container->get('database'). Neki autori testova mogu primetiti da kontejner na koji referencira klasa testa nije sinhronizovan sa trenutnim kontejnerom tokom zahteva u funkcionalnom testu. U tom slučaju autor testa može pozvati $this->rebuildContainer() i ponovo pristupiti $this->container->get('database').
Korišćenje druge konekcije sa bazom podataka
Ako vaš sajt koristi više baza podataka, za izvršavanje upita ka bazi koja nije podrazumevana koristite Database::getConnection(). Na primer:
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
Ovo će obezbediti konekciju sa bazom podataka definisanom u settings.php kao:
$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.