tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Dibi::update s omezením na jeden sloupec → fluent

před 7 lety

sumiisakua
Člen | 47

Díky dibi jsem zhýčkáný z krásných dotazů pro select.

Nyní však u update potřebuji možnost omezit pouze na jeden sloupec.

Mám tento dotaz a rád bych ho přepsal do fluent:

dibi::query("UPDATE [::weapons] SET own = %i", $own, "WHERE id = %i", $id);

Dalo by se to napsat takto, ale zde není omezení pro update pouze jednoho sloupce:

dibi::update("[::weapons]", $own)->where("id = %i", $id);

Neví někdo, jak ten první dotaz upravit do podoby druhého, ale stím omezením?


Proč mi tento dotaz nefunguje:

dibi::insert("[::weapons]", $data);

Když ho nahradim za tento, tak to jde správně:

dibi::query("INSERT INTO [::weapons]", $data);

Editoval sumiisakua (17. 2. 2012 12:05)

před 7 lety

HosipLan
Moderator | 4693
dibi::update("[::weapons]", array('own' => $own))->where("id = %i", $id)->execute();
dibi::insert("[::weapons]", $data)->execute();

před 7 lety

sumiisakua
Člen | 47

Díky :)

K tomu updatu. Kdybych to chtěl trochu „zabezpečit“ (nahradit %i), tak ten dotaz stačí upravit takto?:

dibi::update("[::weapons]", array('own' => (int) $own))->where("id = %i", $id)->execute();

Zkusil jsem ten insert, ale má to problém s těmi []:
Table ‚prefix.[weapons]‘ doesn't exist


Ještě bych tě chtěl poprosit, jestli nevíš o nějakém pěkném popisu ->execute(). Rád bych věděl, co to dělá a proč to tam vůbec musí být.

Děkuji.

před 7 lety

HosipLan
Moderator | 4693

Protože když používáš fluent na cokoliv jiného, než na select, tak nemůžeš vedět, v jaký moment máš dotaz vykonat, protože můžeš přidávat další věci do query. U updatu je to where (a další where) u insertu je to například ON DUPLICATE UPDATE. Prostě musíš té třídě říct, že má dotaz vykonat.

před 7 lety

sumiisakua
Člen | 47

HosipLan: Díky za vysvětlení.

Dost mě udivuje, že toto jde:

dibi::insert("::weapons", $data)->execute();

Toto už ne.

dibi::insert("[::weapons]", $data)->execute(); // Table ‚prefix.[weapons]‘ doesn't exist

Když práve dibi u selectu metodu se závorkami používá a problém není :)

před 7 lety

Milo
Nette Core | 1119

sumiisakua napsal(a):
K tomu updatu. Kdybych to chtěl trochu „zabezpečit“ (nahradit %i), tak ten dotaz stačí upravit takto?:

dibi::update("[::weapons]", array('own' => (int) $own))->where("id = %i", $id)->execute();
dibi::update('[::weapons]', array('own%i' => $own))->where('id = %i', $id)->execute();