Přechod na verzi 2.1.0 a problém s připojením do více databází

před 5 lety

Zuben45
Backer | 270
+
0
-

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/…igration-2-1#…

před 5 lety

enumag
Člen | 2128
+
0
-

Tohle asi nebude moc efektivní, chybí ti tam cache. Projdi si API té třídy Context, jako třetí patametr jí můžeš předat cachestorage.

před 5 lety

Eda
Člen | 212
+
0
-

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…

před 5 lety

Zuben45
Backer | 270
+
0
-

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í ;)

před 5 lety

Eda
Člen | 212
+
0
-

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#…

před 5 lety

mildhouse
Člen | 27
+
0
-

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);
}