related procházení NE podle primarního klíče
- kleinpetr
- Člen | 480
Ahoj, asi jsem se do toho trochu zamotal a potřeboval bych popostrčit..
mám dvě tabulky
authors
- id
- primary_name
authors_similar
- id
- author_id
- similar_author_id
nyní si pošlu do template
$authors_similar->findAll()->group('author_id');
a jak nyní v šabloně vypíši tento formát
Jan Novák (->author->primary_name)
- související
- Novák Jan
- Honza Novák
Další jméno
atd atd.
když se v šabloně snažím iterovat nad tímhle:
$similars = $author->related('authors_similar.author_id');
// tudíž se snažím udělat něco jako
WHERE authors_similar.author_id = author.id
Tak nevypíše nic.
protože takový záznam neexistuje, doplní to totiž podle primárního
klíče takže: WHERE authors_similar = id
Ale pokud z tabulky
odstraním ID tak musím jako PK nastavit jak author_id tak similar_author_id a
v tu chvíly ilegal offset type
Jak nejlépe to řešit ? díky
Editoval kleinpetr (16. 4. 2015 2:13)
- romiix.org
- Člen | 343
Neviem či som to dobre pochopil, ale skús toto:
$similars = $hotel->related('auhors', 'similar_author_id');
related() má druhý parameter ;)
- kleinpetr
- Člen | 480
Ano vím, používám místo toho tečku.
Tak jinak, napíšu dotaz jak by to mělo jít logicky.
$authors = 'SELECT * FROM authors_similar';
foreach($authors as $author){
echo $author->authors->primary_name;
//author nyní obsahuje | ID záznamu(PK) | author_id(sebe) | similar_author_id(podobného)
//pokud tedy nyní použiji related() vždy se vezme hodnota PK tudíž ID záznamu (k ničemu)
//vytáhnu tedy všechny podobné záznamy
$similar = 'SELECT * FROM authors_similar WHERE similar_author_id = '.$author->author_id;
foreach($similar as $similar_author){
echo $similar_author->authors->primary_name;
}
}
a tak my vznikne seznam. Jak tohle přepsat do Nette Database ? Jinak bylo by asi možné nevycházet z tabulky authors_similar, ale přijde mi pak zbytečné procházet všechny autory když u nich ani schoda být nemusí.
Editoval kleinpetr (16. 4. 2015 2:00)
- romiix.org
- Člen | 343
public function renderDefault()
{
$this->template->authors = $this->database->table('authors_similar')->group('author_id');
}
<ul n:inner-foreach="$authors as $author">
<li>{$author->author->primary_name}
<ul n:inner-foreach="$author->author->related('authors_similar', 'similar_author_id') as $similar">
<li>{$similar->author->primary_name}</li>
</ul>
</li>
</ul>