připojení na databázi podle webu
- malek8
- Člen | 13
Jake je nejlepší řešení pro připojení se k databázi podle domeny / aplikace v rámci?
teď to mam přes constructor.
takto?:
database:
default:
dsn: „mysql:host=localhost;dbname=nette“
user: „root“
password: „“
app2:
dsn: „mysql:host=localhost;dbname=app2“
user: „app2_root“
password: „“
jak a kde je nejlepší se připojit?
basePresneter?
a jak? new Connection(„app2“)
něco take by bylo možné? nebo si musim načíst data s configu?
dekuji
- CZechBoY
- Člen | 3608
No nejlepší je držet se MVC a mít přístup k databázi pouze
v modelové vrstvě. Ty modely potom injectuješ do presenteru a
v presenterech chceš po modelový vrstvě nějaký akce – editace,
přidání, výpis něčeho, …
nějaký repository v modelové vrstvě
class MyRepository
{
public function __construct(Context $db)
{
$this->db = $db;
}
public function getById($id)
{
return $this->db->table('tabulka')->wherePrimary($id)->fetch();
}
}
zaregistruješ jako službu v DIC (dependency injection container)
services:
- MyRepository
a použiješ v presenteru
class MyPresenter extends Nette\Application\UI\Presenter
{
/** @var MyRepository @inject */
public $myRepository;
public function actionDetail($id)
{
$this->template->info = $this->myRepository->getById($id);
}
}
Pokud chceš využívat obě databáze tak je potřeba někde uvést jakou db
budeš používat. Jde to zase v konfiguráku uvést jako parametr
konstruktoru.
např použiju app2 databázi
class App2Repository
{
public function __construct(Context $db)
{
$this->db = $db;
}
}
v dic zaregistruju
database:
app2:
# nastaveni db
autowired: false # tuto službu nechci automaticky předávat tam, kde vyžadována služba Nette\Database\Context (tzn. tuhle službu do nějaký služby dostaneš jen manuálně uvedením tady v konfiguraci)
services:
- App2Repository(@database.app2.context)
Editoval CZechBoY (19. 5. 2016 14:36)