Jak na INNER JOIN v Nette database aka notORM

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

Zdravím, prosím vedel by nekdo jak udelat jednoduchy inner join pomoci nette database a synatxe
notOrm? Chtel bych udelat neco takoveho:

$this->connection->query('SELECT * FROM user INNER JOIN user2team WHERE user.id = user_id AND team_id=?',  $id);

Uživatel muže být ve více týmech a já chci jen vypsat všechny uživatele v jednom týmu u kterého znám id.

Tabulka1: id, username
Tabulka2: id, user_id, team_id

Zkousel jsem to vselijak, ale nepovedlo se, diky moc za rady…

h4kuna
Backer | 740
+
0
-

A team může mít více useru, tzn vztah m:n tak na to je přesně toto. Musíš mít vytvořenou mezi tabulku což je tvoje tabulka2.

Editoval h4kuna (29. 10. 2011 11:12)

joseff
Člen | 233
+
0
-

Díky za typ, ale nějak mi práve nejde upravit ten první řádek z příkladu:

foreach ($database->table('book')->order('title')->limit(5) as $book)

V příkladu se vypisuje limit 5, ale já bych chtěl vypsat pouze ty prvky, kde existuje odpovídající záznam ve spojovací tabulce.

spidy
Člen | 55
+
0
-
foreach ($database->table('book')->related('book_tag')->order('book.title') as $book_tag)
{
	echo $book_tag->tag->name . ', ';
}

Editoval spidy (30. 10. 2011 11:12)

joseff
Člen | 233
+
0
-

No dobrá děkuji za ukázku, jen mi nejde pod kuži jedna věc. Většinou kodérovi předávám surová data. Tedy jen proměné a pole, jenže v tomto případě mu budu muset říct aby na pole foreach zavoalal ->tag->name což je trochu divné… A vyřešit to lze pokud se nepletu jen tak že projdu foreachem data někde v modelu a vrátím pole, jenže tam zase ztrácím lazy loading, takže zkončím zase u SQL. Nebo se pletu?

joseff
Člen | 233
+
0
-

spidy napsal(a):

foreach ($database->table('book')->related('book_tag')->order('book.title') as $book_tag)
{
	echo $book_tag->tag->name . ', ';
}

Nefunguje :-(

h4kuna
Backer | 740
+
0
-

Nefunguje je dost abstraktní.

Vyhodilo ti to nějakou exception nebo to nedělá co chceš?