前々回に引き続き、今回もCodeIgniterのActiveRecordで苦労した事を備忘録として残しておきます。
CodeIgniterのActiveRecordでは、
$this->db->where('item1', '1');
$this->db->where('item2', '2');
上記のように、カラムと検索値を指定するだけで、簡単にwhere句が作成できます。ただし、複雑なSQL文の事を考慮し、動的にwhere句を作成する事もできます。
// 検索条件の作成
$whereString = ' ( item1 = ' . $value1;
$whereString.= ' or item1 = ' . $value2 . ')';
$whereString.= ' and del_flg = ' . $delFlg;
$whereString.= ' and proc_date < ' . $nowDate;
$updateData = array(
'del_flg' => self::NOT_DEL_DATA,
'last_updated_user' => self::PRG_ID,
'updated_at' => $updateTime,
);
$this->db->where($whereString);
$this->db->update('sample_table', $updateData);
上記は、変数whereStringにwhere句を動的作成して格納していますが、実はエラーになってしまいます。(正しく解析されない)
原因は、whereStringの先頭に半角スペースが設定されている為です。
先頭の半角スペースを削除すれば、正常に動作します。
修正したものは以下になります。
(半角スペースだけの問題なので、パッと見は変わりませんが)
// 検索条件の作成
$whereString = '( item1 = ' . $value1;
$whereString.= ' or item1 = ' . $value2 . ')';
$whereString.= ' and del_flg = ' . $delFlg;
$whereString.= ' and proc_date < ' . $nowDate;
$updateData = array(
'del_flg' => self::NOT_DEL_DATA,
'last_updated_user' => self::PRG_ID,
'updated_at' => $updateTime,
);
$this->db->where($whereString);
$this->db->update('sample_table', $updateData);
これは、原因を突き止めるのに、本当に時間が掛かりました。ActiveRecord , CodeIgniter , PHP
0 件のコメント:
コメントを投稿