odebírání řádků z dotazu na základě jiného dotazu
- Lavka
- Člen | 8
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.
- Lavka
- Člen | 8
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
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.