Nette\Database automatický join ve where s delete

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

Mám tabulku foo, ve které je cizí klíč ukazující do tabulky bar. Pokud provedu tento select, Nette\Database automaticky doplní join:

$connection->table('foo')
	->where('bar.param', 'ipsum')
	->fetch();

Pokud ovšem chci tento záznam smazat, k joinu nedojde a mysql hlásí chybu:

$connection->table('foo')
	->where('bar.param', 'ipsum')
	->delete();

Alternativou je (za cenu dvou dotazů místo jednoho):

$connection->table('foo')
	->where('bar.param', 'ipsum')
	->fetch()
	->delete();

Bug or feature?

(Nette Framework 2.1-dev)

Editoval Seith (1. 8. 2013 16:42)

hrach
Člen | 1844
+
0
-

Jakou chybu hlasi?

enumag
Člen | 2118
+
0
-

Nejsou joiny v delete dotazu trochu nesmysl?

Tharos
Člen | 1030
+
0
-

Nesmyslné nejsou, například v MySQL se jich dá docela výhodně využít.

Seith
Člen | 24
+
0
-

hrach napsal(a):

Jakou chybu hlasi?

Laděnka:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'bar.param' in 'where clause'

SQL:
DELETE
FROM `foo`
WHERE (`bar`.`param` = 'ipsum')

Fetch (tedy select) se provede správně:

SELECT `foo`.`id`
FROM `foo`
LEFT JOIN `bar` ON `foo`.`bar_id` = `bar`.`id`
WHERE (`bar`.`param` = 'ipsum')
hrach
Člen | 1844
+
0
-

It will be a BC break, but yes, it should be fixed…

sKopheK
Člen | 207
+
+1
-

V Nette 2.1.1 to pořád nefunguje.
Takže buď vytáhnout záznamy a ty pak přes related() ověřovat s propojenou tabulkou, nebo si napsat čisté SQL. Nějaký jiný nápad?