Database Explorer – M:N SELECT přes spojovací tabulku

JaxP
Člen | 62
+
0
-

Ahoj,
mějme databázovou strukturu jako z dokumentace.

Jak docílit vytažení dat i s hodnotami z cizí tabulky jako Selection popř. array? Resp:

/** Ukázka z dokumentace */
foreach ($book->related('book_tag') as $bookTag) {
  echo $bookTag->tag->name . ', '; // výpis v rámci cyklu
}
/** Potřebný výsledek */
$tags = [
  1 => 'Název tagu',
  2 => 'Název tagu'
  //...
]

/** Hledám něco jako... (Nefunkční) */
$tags = $book->related('book_tag')->fetchPairs('tag_id','tag:name');
$tags = $book->related('book_tag')->tags;
David Matějka
Moderator | 6445
+
0
-

myslim, ze pomoci nejake zkratky pres fetchPairs to nepujde, takze budes muset pouzit foreach a sestavit pole s tagama

GEpic
Člen | 562
+
0
-

A to hledáš tagy pro jednu konkrétní knížku?

JaxP
Člen | 62
+
0
-

GEpic napsal(a):

A to hledáš tagy pro jednu konkrétní knížku?

Ano ⇒ lze tedy alternativně udělat SELECT s podmínkou WHERE na id knihy

/** něco jako */
$this->getAll()->where(':book_tag.book_id', $book->id)->fetchPairs('id','name');
GEpic
Člen | 562
+
0
-

Přesně tak, podle mě to je logičtější – hledat tagy k odpovídající knize, i surový SQL dotaz by byl pak jednoduchý a jasný.

norbe
Backer | 405
+
+2
-

Cca takhle by to mělo podle mne fungovat:

$book->related('book_tag')->select('tag_id, tag.name AS tag_name')->fetchPairs('tag_id','tag_name');