Database explorer Join a JoinWhere
- FilipStudený
- Člen | 8
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
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')