Database explorer Join a JoinWhere

FilipStudený
Člen | 8
+
0
-

Zdravím,

snažím se použít Nette Database Explorer pro joinnování.

Mám tabulky

Users, která má id, username, firstname, lastname, password, email, register_date
Posts, která má id, creator, content, tag1, tag2, tag3, image
Tags, která má id, name

Potřeboval bych poradit, jak co nejlépe provést spojení tabulek, kde creator odkazuje na id Users a tag1, tag2, tag3 jsou id Tagů.

Mám tento kód, který sice funguje, ale nevím jestly je to nejlepší způsob jak získat data:

    public function getAll()
    {
       $posts = $this->database->query("
                SELECT p.*,
               u.username,
               u.email,
               (SELECT t1.name FROM tags t1 WHERE t1.id = p.tag1) as tag_name_1,
               (SELECT t2.name FROM tags t2 WHERE t2.id = p.tag2) as tag_name_2,
               (SELECT t3.name FROM tags t3 WHERE t3.id = p.tag3) as tag_name_3
                FROM posts p
                JOIN users u ON p.creator = u.id ORDER BY created_at DESC;")
            ->fetchAll();

       return $posts;
    }

Zkoušel jsem něco jako:

$posts = $this->database->table('posts')
    ->select('posts.*, users.username, users.email, t1.name AS tag_name_1, t2.name AS tag_name_2, t3.name AS tag_name_3')
    ->where('created_at <', new \DateTime())
    ->order('created_at DESC');

$posts->joinWhere('users','posts.creator = users.id');
$posts->joinWhere('tags t1','posts.tag1 = t1.id');
$posts->joinWhere('tags t2','posts.tag2 = t2.id');
$posts->joinWhere('tags t3','posts.tag3 = t3.id');

$posts = $posts->fetchAll();

return $posts;

Ale toto nefunguje jelikož mi to hází chybu že t1 není definováno a poté $posts->users že neexistuje, když $posts->users nepoužívám.

Lze toto nějak provést?

Díky

Tomáš Vodička
Člen | 28
+
+1
-

Pokud máš v databázi nastavené cizí klíče, mělo by fungovat něco takového

$this->database->table('posts')
    ->select('posts.*, creator.username, creator.email, tag1.name AS tag_name_1, tag2.name AS tag_name_2, tag3.name AS tag_name_3')
FilipStudený
Člen | 8
+
0
-

Díky, pomohlo mi to