Oznámení
DiBi Fluent Update na JOIN
před 5 lety
- mdjimy
- Člen | 9
Nazdar, právě jsem narazil na problém s update.
Při fluent syntaxi se mi nedaří provést update na zjoinované tabulky, viz.
přiložený kód.
\dibi::command()->
update(Owner::TABLE)->
leftJoin(OwnersQuota::TABLE)->
on('%n = %n', Owner::ID(), OwnersQuota::ID_OWNER())->
set('%n = 0', OwnersQuota::QUOTA())->
where('%n = %s', Owner::SKODA_NO(), $ident)->
test();
Vrací:
UPDATE `owner`
SET `owners_quota`.`quota` = 0
WHERE `owner`.`skoda_no` = '555'
FROM
LEFT JOIN `owners_quota` ON `owner`.`id` = `owners_quota`.`id_owner`
A já potřebuji:
UPDATE `owner`
LEFT JOIN `owners_quota` ON `owner`.`id` = `owners_quota`.`id_owner`
SET `owners_quota`.`quota` = 0
WHERE `owner`.`skoda_no` = '2004A'
Řešil už to někdo?
před 5 lety
- Milo
- Nette Core | 1119
Můžeš si upravit pořadí klauzulí.
DibiFluent::$masks['UPDATE'] = array(
'UPDATE', 'LEFT JOIN', 'SET', 'WHERE', 'ORDER BY', 'LIMIT'
);
Ale pokud updatuješ pouze jednu tabulku z toho joinu, nebyl by lepší obyčejný update se subselectem v podmínce?
před 5 lety
- mdjimy
- Člen | 9
Milo napsal(a):
Můžeš si upravit pořadí klauzulí.
DibiFluent::$masks['UPDATE'] = array( 'UPDATE', 'LEFT JOIN', 'SET', 'WHERE', 'ORDER BY', 'LIMIT' );
Ale pokud updatuješ pouze jednu tabulku z toho joinu, nebyl by lepší obyčejný update se subselectem v podmínce?
Díky za odpověď, ale moc se mi nelíbí, že si to tímto přepíšu v rámci celé aplikace, i když vlastně pokud si hodnotu DibiFluent::$masks[‚UPDATE‘] uložím do tempu a pak ji obnovím, tak by to šlo…
Jinak řešení pomoci sub-selectu mne nenapadlo, dobrá připomínka, ale v mém případě by to stejně nebylo možné… Obě tabulky mají milióny záznamů, což by MySQL velmi těžce rozdýchávalo… :)