Použití dvou databází v modelu
- mara11
- Člen | 42
Ahoj, ptám se na správné nastavení configu a připojení ke dvoum databázím… momentálně, když volám spojení ke druhé databázi, tak pořád se dotazuji nad tou první
config.local.neon
parameters:
database:
clients:
dsn: 'mysql:host=127.0.0.1;dbname=clients'
user: root
password:
options:
lazy: yes
local:
dsn: 'mysql:host=127.0.0.1;dbname=local'
user: root
password:
options:
lazy: yes
config.neon
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
parameters:
php:
date.timezone: Europe/Prague
nette:
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
- App\Model\HomeModel
router: App\RouterFactory::createRouter
BaseModel
class BaseModel extends \Nette\Object {
protected $masterDb;
protected $localDb;
public function __construct(\Nette\Database\Context $clients, \Nette\Database\Context $local) {
$this->masterDb = $clients;
$this->localDb = $local;
}
}
Editoval mara11 (31. 1. 2015 11:11)
- Oli
- Člen | 1215
Musíš si tam totiž předat o jakou databázi se jedná viz.: připojení do dvou databází. Jinak ti to tam hodí vždycky hodí jen jednu. Myslím, že tu první, že je považovaná za defaultní.
- Oli
- Člen | 1215
To bylo pro starou verzi nette, kde byla database pod nette. Ve verzi 2.2 se Nette rozsekalo na balíčky a database už se nenastavuje jako součást Nette. Takže by to mělo být zhruba takhle:
services:
clients: @database.clients
local: @database.local
- App\Model\HomeModel(@clients, @local)
- mara11
- Člen | 42
Už jsme se někam posunuli, @database.clients apod. je správně,
akorát se má používat už Context a ne Connection ne?
Argument 1 passed to App\Model\HomeModel::__construct() must be an instance of
Nette\Database\Context, instance of Nette\Database\Connection given…
Editoval mara11 (31. 1. 2015 12:02)
- mara11
- Člen | 42
nebo si mám v konstruktoru předat \Nette\Database\Connection $clients
a pak $context = new \Nette\Database\Context($clients);
to mi ale přijde, že je přesně příklad toho jak se to nemá dělat…
(každopádně, když to tak udělám, tak mi to funguje, ale nechci to takhle
divně, když je určitě lepší řešení :-D )
- Oli
- Člen | 1215
Určitě by to mělo jít z neonu. Máš pravdu, chce to tam předat context. Píšu z hlavy, ale můžeš zkusit něco jako:
services:
clients: @database.contect(@database.clients)
local: @detabase.context(@database.local)
- App\Model\HomeModel(@clients, @local)
Případně něco na ten způsob. Nebo by musel poradit někdo jinej…
- saimons
- Člen | 293
Nebylo by lepsi si vytvorit na kazde pripojeni servicu abych pak pro kazdy model nemusel urcovat co v ni chci za DB a potom bych si jen v kazdem modelu injectnul servicu s konkretnim pripojenim DB? Melo by to jit napsat nejak takto, ale asi by to melo jit preposat kopletne do Neonu (https://forum.nette.org/…m-do-dvou-db)