メモの日々


2005年06月28日(火) [長年日記]

[php] DB_DataObjectでwhereAdd()してupdate()

DB_DataObject 1.7.13で、

UPDATE person SET removed=1 WHERE age = 21

のようなSQLを実行しようとして

$person = DB_DataObject::factory('person');
$person->whereAdd('age = 21');
$person->removed=1;
$person->update();

のようなコードを書いたときに、UPDATEが実行される場合とされない場合があった。

どうも、ageがpersonテーブルの主キーであれば動くがそうでない場合は動かないようだ。

動かない場合のエラーを調べると、

DB_DataObject Error: update: trying to perform an update without
                             the key set, and argument to update is not
                             DB_DATAOBJECT_WHEREADD_ONLY

と出力された。これだけではよく分からなかったが、DataObject.phpを見るとupdate()のコメントに「@param object dataobject (optional) | DB_DATAOBJECT_WHEREADD_ONLY - used to only update changed items.」とあったので、update()を呼ぶ所を

$person->update(DB_DATAOBJECT_WHEREADD_ONLY);

のようにしてみたらUPDATEが実行された。

マニュアルにはDB_DATAOBJECT_WHEREADD_ONLYのこと書かれてないなあ。

[php] DB_DataObjectでのエラーの調べ方

全然分からなかったんだけど、Linuxを使ってみるに、

$user = DB_DataObject::factory("m_user");
if (PEAR::isError($user->_lastError)) {
  $reason = $user->_lastError->getMessage();
  return;
}

という方法が書かれていたのでこれを真似したらできた。

やること

  • オーブンレンジ用べんり棚
  • ブラウンの安い電動歯ブラシ買う
  • 蛍光灯を捨てる
  • 家賃
  • 健康保険料
  • 税務署