Kdy se připojit k databázi?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jakub Lédl
Člen | 55
+
0
-

Kdy je nejlepší doba na připojení k databázi? Co jsem zatím viděl, řeší se to buď takto:

<?php

  abstract class BasePresenter extends /*Nette\Application\*/Presenter {

    ...

    protected function startup() {
      $this->db = new DibiConnection(array(
        ...
      ));
    }
  }

?>

nebo takto:

<?php

// bootstrap.php

$application->onStartup[] = 'BaseModel::initialize';

?>

Osobně se mi nejjednodušší a nejpohodlnější zdá volat přímo v bootstrap.php dibi::connect(Environment::getConfig('database'));. Jelikož jsem to neviděl v žádném příkladu, je nějaký logický důvod to nedělat (předpokládejme, že chci tahat data z DB při každém requestu)?

redhead
Člen | 1313
+
0
-

máš ještě jednu možnost a to připojit se až když je potřeba. Dibi má na to super option. U té poslédní možnosti co si uvedl bys mohl do konfigurace pro db nastavit lazy = true a to ti zaručí, že se připojí při prvním selectu/updatu/deletu/… Aspoň já to tak dělám..

Petr Motejlek
Člen | 293
+
0
-

Lazy neni spatne, problem je, ze kdyz pouzivas treba dataSource(), tak se o chybe spojeni dozvis obvykle az ve chvili, kdy v sablone nad tim datasourcem volas foreach. Lepsi reseni je v pripade, ze vis, ze aplikace bez DB nema cenu, dat dibi::connect() uz do bootstrapu, resp. si vytvorit funkcicku a tu pridat to $application->onStartup pole. Kdyz aplikace potrebuje DB jen obcas, stejne se k ni pripojuji uz v bootstrapu, radsi at mi to zdechne ve chvili, kdy jde jeste nejak normalne presmerovat na ErrorPresenter.

PetrP
Člen | 587
+
0
-

Připojování do db by si měl řešit Model.

A je už jedno jak přesně:

$application->onStartup[] = 'BaseModel::initialize';
//nebo v
BaseModel::__construct();
//nebo v
BaseModel::getConnection();

To že použiju lazy a dozvím se to až v šabloně mi nevadí, protože laděnka případný výstup zakryje.

Řeší se to třeba tady:
https://forum.nette.org/…tion-z-nette
nebo
https://forum.nette.org/…ipojeni-k-db

Stačí jen hledat.

Editoval PetrP (20. 1. 2010 18:06)