Zvláštní chování Nette\database->table()->update

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

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
+
0
-

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.