PHP
CodeIgniter
ActiveRecord

株式会社オズビジョンの@terra_yuccoです。

最近コードを触ることは減りましたが、改善活動は細々とやっています。
その中で、素のクエリーからActive Recordに書き換えたかった @CodeIgniter 2.0.3
でも、After(ver.1)が動かなかったんです。

Before

$inCondition = '110,111,112';
$sql = "SELECT id
    FROM `hoge`
    WHERE status = 2 and type = 'fuga' and id in ( $inCondition )";
$res = $db->query($sql)->result_array();

After (ver.1)

$inCondition = '110,111,112';
$db->select('id');
$db->from('hoge');
$db->where('status', 2);
$db->where('type', 'fuga');
$db->where_in('id', $inCondition);
$res = $db->get()->result_array();

last_query()とってみたら、発行SQLはこんな風になっていた。
IN句は (110,111,112) であってほしかったので、確かにこれでは動かない。

SELECT `id`
FROM (`hoge`)
WHERE `status` =  2
AND `type` =  'fuga'
AND `id` IN ('110,111,112') 

After(ver.2)

$inCondition = '110,111,112';
$db->select('id');
$db->from('hoge');
$db->where('status', 2);
$db->where('type', 'fuga');
$db->where("id in ({$inCondition})");
$res = $db->get()->result_array();

After(ver.2)は動きました。
素の構文構造を書かないといけないのがイヤだけど、とりあえず素のSQLを書くよりは数万倍いいはず…

おしまい。