odebírání řádků z dotazu na základě jiného dotazu

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

Dobrý den,
řeším teď výpis z jedné tabulky od, které potřebuji odečíst některé řádky podle výsledku z druhé tabulky. zkoušel jsem tohle

...->where("NOT EXISTS(SELECT * FROM note WHERE note.task_id = task.id)")...

ale výsledkem je error. Napsal bych to do query() ovšem to bych se ochudil o cizí klíče, na kterých je databáze postavena. Případně nějaká jiná možnost jak odstraňovat řádky z dotazů na základě jiného dotazu.
Předem děkuji za radu.

enumag
Člen | 2118
+
0
-

Hledej SqlLiteral (jsem línej psát příklad, srry).

Lavka
Člen | 8
+
0
-

K chybě dochází při vykreslování .latte šablony jakmile začnu doplňovat do klauzule WHERE podmínky typu note.task_id = task.id s tečkou ve funkci EXISTS(). Takže výsledku z toho dotazu nerozumí makro foreatch. Klidně by se mi hodil jen způsob jak odstraňovat výsledné řádky z objektu Nette\Database\Table\Selection po provedení SQL dotazu (takové post filtrování).

Petr Hudík
Člen | 49
+
0
-

Nette Database volá dotazy až v momentě, kdy je potřebuješ, takže se chyba může projevit až v šabloně. Můžeš zkusit už v modelu zavolat ->fetch(), co to udělá.

Daný dotaz by možná šel přepsat i trochu jinak, zkusil bych využít tento řádek z dokumentace $table->where("field", $conn->table($tableName)->select('col')). Nevím přesně co chceš provést, proto nemohu napsat ukázku. Obecně se mi nejvíc osvědčilo u NDB zkusit uvažovat trochu jinak.