前々回に引き続き、今回も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