Vytvoření připojení k více databázím
- milda001
- Člen | 6
Zdravím,
Potřeboval bych pomoci, hledám již dlouhou dobu a nemůžu to zprovoznit.
Potřeboval bych v neonu nastavit více připojení.
Pokud však vytvořím v neonu tento setting, dostávám od tracy
Unknown configuration option database.default.dotazy, database.default.dotazy2.
database:
dotazy:
dsn: 'mysql:host=127.0.0.1;dbname=dotazy'
user: root
password: *****
dotazy2:
dsn: 'mysql:host=127.0.0.1;dbname=dotazy2'
user: root
password: *****
Můžete prosím poradit a napsat, jak bych implementoval toto nastavení?
- milda001
- Člen | 6
Díky,
Problém byl ve střetu local.neon a neon pro produkční server.
Nyní trochu bojuji s modelem v neonu mám:
database:
dotazy:
dsn: 'mysql:host=127.0.0.1;dbname=dotazy'
user: root
password: *****
dotazy2:
dsn: 'mysql:host=127.0.0.1;dbname=dotazy2'
user: root
password: *****
- App\Model\Dotazy(@database.dotazy.context)
- App\Model\Objednavky(@database.objednavky.context)
jakým způsobem můžu přes konstruktor nyní přistoupit k jedné nebo
druhé dadabázi?
Koukal jsem se do containeru, zde se vytvoří pole s objemi databázemi, ale
přes konstruktor se mi předá pouze první připojení. Jak se dostanu
na druhé?
Předem díky za odpověď
- sventek
- Backer | 16
Ahoj,
mám stejný problém – config mám stejně, ale funguje to tak, že obě připojení se koukají do stejné databáze. Mohl bych vás někoho poprosit o kontrolu modelu?
<?php
class BaseModel extends Nette\Object
{
/** @var Nette\Database\Context @inject*/
public $db1;
/** @var Nette\Database\Context @inject*/
public $db2;
public function __construct(Nette\Database\Context $db1, Nette\Database\Context $db2)
{
$this->db1 = $db1;
$this->db2 = $db2;
}
}
?>
Když pak volám
<?php
$this->db1->table('users')->where('id = 1')->fetch();
?>
tak mi to křičí, že tabulku users nezná – a přitom tam určitě je. Zkusil jsem si vypsat u obou připojení
<?php
$this->db1->getConnection()
$this->db2->getConnection()
?>
a vážně kouká do stejné databáze …
Nevíte někdo, kde může být chyba prosím?
- sventek
- Backer | 16
V configu mám:
database:
db1:
dsn: 'mysql:host=127.0.0.1;dbname=db1'
user: root
password:
autowired: true
options:
lazy: yes
db2:
dsn: 'mysql:host=127.0.0.1;dbname=db2'
user: root
password:
autowired: false
options:
lazy: yes
services:
- App\Model\Servis(@database.db1.context, @database.db2.context)
Editoval sventek (10. 7. 2016 9:18)
- sventek
- Backer | 16
@CZechBoY Chápu to dobře, že smažu složku cache v tempu? To jsem udělal a beze změny. Inject jsem dal pryč – ano, je to v konstruktoru.
Každopádně se mi podařilo najít funkční stav, kdy dám do každého modelu právě jedno připojení. Nakonec mě to aspoň donutí si to líp rozvrhnout, aby nebylo všechno všude, ale co třída modelu, to jedno připojení…