Přechod na verzi 2.1.0 a problém s připojením do více databází
- Zuben45
- Člen | 268
Pokud jste přešli na verzi 2.1, v předchozí verzi jste používali připojení do více db a máte hlášku:
Nette\Database\Connection::table() is deprecated; use Nette\Database\Context::table() instead.
Opravuje výběr tabulky z jiné db ;)
Tak stačí jednoduše opravit.
z
public function getForumdb()
{
$fconnection = new Connection('mysql:host=localhost;dbname=forum', 'username', 'password');
return $fconnection->table("users");
}
na
public function getForumdb()
{
$fconnection = new Connection('mysql:host=localhost;dbname=forum', 'username', 'password');
$forumconnect = new Context($fconnection);
return $forumconnect->table("users");
}
Nevím jestli má vliv, ale prosjistotu jsem přidal:
use Nette\Database\Context;
+připojení do klasických db je napsané v dokumentaci → https://doc.nette.org/…tions/to-2-1#…
- Zuben45
- Člen | 268
Eda napsal(a):
Jen upozorním, že tohle rozhodně není best practise :-)
Připojení k databázi by měl vytvářet výhradně DI container a ne třída sama. A pokud potřebujete druhé připojení, není problém si ho nakonfigurovat v config.neon a pak vstříknout do služby, kde ho potřebujete…
jenomže já se v té třídě potřebuji dostat do dalších dvou databází ;)
- Eda
- Backer | 220
V konfigu můžeš mít teoreticky kolik chceš databází :-)
Návod, jak přesně na to, najdeš třeba zde:
https://forum.nette.org/…uhe-databazi#…
- mildhouse
- Člen | 27
Eda napsal(a):
V konfigu můžeš mít teoreticky kolik chceš databází :-)
Návod, jak přesně na to, najdeš třeba zde:
https://forum.nette.org/…uhe-databazi#…
OK, jenže v configu konfiguruju Nette\Database\Connection
nette:
database:
default:
dsn: ...
user: ...
password: ...
options: ...
forum:
dsn: ...
user: ...
password: ...
options: ...
services:
forumRepository: Model\ForumRepository(@nette.database.forum)
Ale potřebuju Nette\Database\Context, takže :
namespace Model;
abstract class ForumRepository extends \Nette\Object
{
/** @var Nette\Database\Context */
public $context;
public function __construct(\Nette\Database\Connection $conn)
{
$this->context = new \Nette\Database\Context($conn);
}
}
a jsme tam kde jsme byli, nemáme cachestorage. Jak to udělat správně pomocí DI containeru? Tohle nefunguje :
public function __construct(\Nette\Database\Connection $conn, \Nette\Database\Reflection $ref, \Nette\Caching\Storage $cache)
{
$this->context = new \Nette\Database\Context($conn, $ref, $cache);
}