2017-12-25 16 views
2

私はCodeigniterを使用しており、コントローラからコンマで区切られたリストをモデルに渡して、where_not_inクエリで使用しています。コンマ区切りリストを作成する次のコードがあります。コントローラからモデルへコンマ区切りリストを渡す

$mnames = Array(); 
foreach($facet_group['manufacturer_name'] as $u) $mnames[] = $u['value']; 
$manufacturer_list = implode(",",$mnames); 

これは、Alcatel、Apple、Huawei、LG、Microsoft、Motorola、Nokia、Samsung、Sonyを生成します。プロファイラから出力される

$this->db->select('name'); 
$this->db->from('wl_manufacturers'); 
$this->db->where('active', 1); 
$this->db->where('supplier_type', 'product'); 
$this->db->where_not_in('name', $str); 

の$ strはカンマ区切りリスト

さ:

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('Alcatel,Apple,Huawei,LG,Microsoft,Motorola,Nokia,Samsung,Sony') 

周りの単一引用符がありませんので、これは動作するようには思えない私のクエリはこれですリスト内の各項目。しかし、このようなリストを手作業で作成すると、$ array = array( 'Alcatel'、 'Apple'、 'Huawei'、 'LG'、 'Microsoft'、 'Motorola'、 'Nokia'、 'Samsung' )。私はモデルに渡す前に、カンマ区切りのリスト項目に単一引用符を追加しようとしている

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('Alcatel', 'Apple', 'Huawei', 'LG', 'Microsoft', 'Motorola', 
'Nokia', 'Samsung', 'Sony') 

$str = "'" . implode ("', '", $mnames) . "'"; 

が、プロファイラ出力がこれですそれは動作し、プロファイラからの出力があります:

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('\'Alcatel\', \'Apple\', \'Huawei\', \'LG\', \'Microsoft\', 
\'Motorola\', \'Nokia\', \'Samsung\', \'Sony\'') 

バックスラッシュが追加されているため、再び動作しません。ですから質問はどうやってコンマ区切りリストを作成し、それを私のモデルに渡し、正しく動作するようにすることができますか?

答えて

1

あなたは

$this->db->where_not_in('name', $arr); 

explodeご覧のように、あなたはあなたのクエリでそれを使用することができ、アレイ

$arr=explode (',',$str) 

を作成するためにあなたのカンマ区切りの文字列($ strを)爆発する必要があります。 をし、CIのwhere_not_in()

+0

ありがとう、あなたの答えの後、私はコンマ区切り文字列をクエリではなく、配列ではないことに気づいた – David

+0

幸せな休日を助けることができる素晴らしい... – Vickel

0

$this->db->where_not_inは値の配列を予期しているようです...または文字列が渡された場合は同じ1つの項目、文字列の配列を渡します。

配列で始める場合は、それをwhere_not_inに渡すだけです。しかし、CSVの文字列で始める場合は、str_getcsv(my_string_of_csv)の配列を取得するとwhere_not_inに渡すことができます。

注:CSVの文字列に空白、エスケープ文字、および/または引用された値が含まれている場合は、str_getcsvを使用するだけでなく、explodeを使用します。参照してください:http://php.net/manual/en/function.str-getcsv.php

関連する問題