related procházení NE podle primarního klíče

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kleinpetr
Člen | 480
+
0
-

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
+
0
-

Neviem či som to dobre pochopil, ale skús toto:

$similars = $hotel->related('auhors', 'similar_author_id');

related() má druhý parameter ;)

kleinpetr
Člen | 480
+
0
-

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
+
0
-
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>
kleinpetr
Člen | 480
+
0
-

Nojo.. nedošlo mi použít related() u jiného sloupce :D díky, asi už jsem přepracovanej :))