Join / subquery při update

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

Zdravím,

Když se pokouším v DB zkrz syntaxi table->where->update upravit vlasnosti účastníka soutěže a najít ho zkrz ID jeho postu, dějou se podivné věci.
Totiž:

$this->connection->table("contestant")->where(":post.id_post",$id_post);

…korektně navrací Nette\Database\Table\Selection správného účastníka, ale na základě…

$this->connection->table("contestant")->where(":post.id_post",$id_post)->update($values);

…se vytvoří dotaz…

`UPDATE `contestant
SET first_name=‚Jane‘, surname=‚Doe‘, city=‚Praha‘, street=‚Plzeňská‘, post_code=40211,
email=?, phone=754664881, date_of_birth=NULL
WHERE (:post.id_post = ‚12‘)``

…který vyhazuje error v SQL syntaxi: „You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':post.`id_pos … “

Uvažuji sprváně, že MySQL neumí kombinovat update s joinama a je potřeba použít subquery? A má Nette\Database nějakou podporu pro subquery nebo se normálně dělá…

$id_contestant = $this->connection->table("contestant")
                        ->select("id_contestant")
                        ->where(":post.id_post",$id_post)
                        ->limit(1)->fetch()->id_contestant;
$this->connection->table("contestant")->where("id_contestant",$id_contestant)->update($values);

…?

Díky za odpověd, Sob.

iguana007
Člen | 970
+
0
-

A nemůže být problém jen v té dvoutečce, kterou máš před post v where podmínce?

CZechBoY
Člen | 3608
+
0
-

Join mimo SELECT není podporován. Navíc třeba oracle to neumí.
Vyber si hodnoty primárního klice a podle toho udelej where na hlavní tabulce.