Pripojujeme sa k databáze
publikované: od: Tibor PiňoV tomto článku si ukážeme pokročilú prácu s pripojením k databáze v CakePHP. Ukážeme si, ako sa pripojiť cez socket alebo ako si nakonfigurovať niekoľko databázových pripojení a následne ich používať.
Definujeme pripojenie k databáze
Databázové spojenie sa v CakePHP definuje v súbore app/config/database.php. Po rozbalení balíku s inštaláciou Cake treba najprv daný súbor premenovať a to z app/config/database.php.default na spomínaný názov app/config/database.php. Po otvorení daného súboru máme k dispozícii preddefinované 2 pripojenia a to default a test
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => 'user',
'password' => 'password',
'database' => 'database_name',
'schema' => '',
'prefix' => '',
'encoding' => ''
);
var $test = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => 'user',
'password' => 'password',
'database' => 'test_database_name',
'schema' => '',
'prefix' => '',
'encoding' => ''
);
}
?>
Poďme si priblížiť základné konfiguračné možnosti.
driver → umožňuje zadať k akému typu databáze sa ideme pripájať. Podporované sú typy mysql, mysqli, sqlite, postgres , mssql, db2, oracle, adodb-[drivername], pear-[drivername].
host → adresa databázového servera.
port → určuju port, cez ktorý sa môžeme k databáze pripojiť.
prefix → umožňuje určiť prefix v názvoch tabuliek v databáze. Využitie nájdeme v prípade, že v jednej databáze máme niekoľko projektov a jednotlivé tabuľky daných projektov by sme chceli od seba jednoznačne odlíšiť daným prefixom.
encoding → umožňuje nastaviť kódovanie spojenia k vašej databáze.
Ako môžeme vidieť, Cake podporuje pripojenie k najpoužívanejším databázovým systémom v súčasnosti. Ak by sa však v danom zozname typ nášho databázového systému nenachádzal, môžeme si vytvoriť vlastný driver alebo prepísať existujúci. Urobíme to jednoducho vytvorením súboru v app/models/datasources/dbo a pomenovaním daného súboru dbo_x.php, kde x je názov nášho databázového systému.
Používame databázové pripojenia
Ako môžeme vidieť, v našom súbore app/config/database.php máme definované 2 pripojenia a to default a test. Cake nám umožňuje jednoducho prepínať medzi týmito pripojeniami a tým určovať, aké pripojenie má naša aplikácia alebo konkrétny model používať. Táto vlastnosť CakePHP nám môže značne uľahčiť prácu a to najmä v prípade, ak testujeme našu web aplikáciu na localhoste a zároveň aj priamo na nejakom webhostingu. Taktiež nám môže byť veľmi nápomocná v prípade, ak by sme chceli určiť, že niektorý model bude získavať dáta z inej databáze ako zvyšné modely.
Poďme si to ukázať na príklade. Našej aplikácii chceme určiť, aby používala pripojenie nazvané test, ktoré sme definovali v súbore app/config/database.php. Do súboru app/app_model.php umiestníme nasledovné
class AppModel extends Model{
var $useDbConfig = 'test';
}
Týmto sme našej aplikácii určili, že všetky modely sa budú pripájať k databáze prostredníctvom pripojenia nazvaného test. Teraz si predstavme situáciu, že chceme zmeniť pripojenie iba pre konkrétny model. V tomto prípade nám stačí pripojenie definovať iba v našom konkrétnom modely
class MyModel extends Model{
var $useDbConfig = 'test2';
}
Týmto sme určili, že model s názvom MyModel sa bude pripájať k databáze prostredníctvom pripojenia nazvaného test2.
Ešte by som poznamenal, že ak máme definované pripojenie s názvom default a našej aplikácii explicitne neurčíme, že máme používať iné pripojenie, Cake automaticky pre pripojenie k databáze vyberie pripojenie nazvané default.
Pripájame sa cez socket
V súčasnosti množstvo webhostingov umožňuje pripojenie k vašej databáze prostredníctvom tzv. socketu. Riešenie v Cake je veľmi jednoduché. Predstavme si, že sa k našej databáze chceme pripojiť cez socket, ku ktorému vedie takáto cesta /tmp/mysql50.sock. Do súboru app/config/database.php následne umiestníme
var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'persistent' => false,
'host' => 'localhost',
'login' => 'login',
'password' => 'password',
'database' => 'db',
'port' => '/tmp/mysql50.sock',
'prefix' => '',
'encoding' => 'utf8'
);
Ako môžeme vidieť, cestu k nášmu socketu stačí zadať do kolonky port a všetko bude fungovať správne. Týmto je náš článok u konca. V článku som sa snažil čo najjednoduchšie zhrnúť možnosti CakePHP v súvislosti s pripojením k databázam.
Rád uvítam vaše námety a pripomienky v diskusii k článku.