Zvláštní chování Nette\database->table()->update
- Václav Novotný
- Člen | 13
Narazil jsem na zvláštní chování Nette\Database
v mojí
aplikaci.
Mám metodu presenteru
<?php
public function actionCreate($id) {
try {
$table = $this->database->table('blog_post');
...
?>
kde nejdřív nastavím tabulku databáze do proměnné $table
a
potom v závislosti na tom, zda je prázdné $id
určuju, zda se
bude vkládat nový záznam, nebo se bude aktualizovat:
<?php
if (empty($id)) {
$data['created'] = date('c');
$data['user'] = $data['updated_user'] = $this->user->id;
$table->insert($data);
} else {
$data['updated_user'] = $this->user->id;
$table->where('id', $id)->update($data);
}
?>
což funguje dobře, ale když jsem měl napsané
<?php
$table->update($data)->where('id', $id);
?>
tedy nejdříve update()
a potom where()
, tak Nette
vyhodilo chybu, že volám where()
nad non-object
a
přitom aktualizovalo všechny řádky v tabulce (na stejné hodnoty).
zajímavé je, že v jiném presenteru v totožné situaci volám
<?php
$table->update($common + $par)->where(array(
'date' => $date,
'acount_currency' => $par['account_currency']));
?>
a v tomhle případě, i když je update()
před
where()
, to funguje.
- ViPEr*CZ*
- Člen | 822
No to je fakt divný. Obecně by volání where po update() projít nemělo,
protože se podívejte do dokumentace co metoda update() vlastně vrací. Pokud
proběhne úspěšně, tak počet změněných řádků a nebo FALSE.
Takže rozhodně volání where po update je nesmysl a musí to hodit chybu
volání where() nad non-objectem.