2016-12-22 5 views
1

私はLaravelプロジェクトに取り組んでおり、好き嫌いの句に複数の値を投稿したいと考えています。私は成功しないと次の方法を試みた。好き嫌いの句で複数の値を渡すことができませんLaravel

$exclude_emails=['odz', 'test.com']; 

    $vendors=\DB::table("vendor_infos") 
       ->where("vendor_infos.email", 'not like', '%'.$exclude_emails.'%') 
       ->orderByRaw("RAND()")->take(8)->get(['vendor_infos.*']); 

私は文字列として渡すことも試みましたが、それでも成功しませんでした。

答えて

2

あなたがこの方法を行うことができ、

$query = DB::table("vendor_infos"); 
foreach($exclude_email as $v){ 
$query->where("vendor_infos.email",'not like','%',$v.'%'); 
} 
$vendors = $query->orderByRaw("RAND()")->take(8)->get(['vendor_infos.*']); 

私はこれが

EDIT

それとも、他の方法を試すことができます動作します願っています。

$exclude_emails = [ 
['vendor_infos.email' ,'not like','%'.'odz'.'%'], 
['vendor_infos.email' ,'not like','%'.'test.com'.'%'], 
]; 
$vendors=\DB::table("vendor_infos") 
       ->where($exclude_emails) 
       ->orderByRaw("RAND()")->take(8)->get(['vendor_infos.*']);  
0

アポストロフィで囲まれた文字列内で配列を使用することはできません。関数の第3引数には既に '%'文字があります。なぜあなたは再びあなたの弦で使ったのですか?

はこれを試してみてください:

$vendors=\DB::table("vendor_infos") 
      ->where("vendor_infos.email", 'not like', '%odz%') 
      ->where("vendor_infos.email", 'not like', '%test.com%') 
      ->orderByRaw("RAND()")->take(8)->get(['vendor_infos.*']); 
0

カスタムクエリを使用しない理由

$exclude_emails=['%odz%', '%test.com%']; 
$exclude_emails = implode('|', $exclude_emails); 
SELECT * FROM `vendor_infos` WHERE `email` NOT REGEXP '{$exclude_emails}' . . . 

$exclude_emailsのサイズに関係なく、簡単です。

Laravelウェイ:

あなたがlaravelで、あなたがこれを行うことができますことを行うことを主張する場合:

// making conditions array 
foreach($exclude_emails as $e){ 
    $final_conditions[] = ['email', 'not like', $e]; 
} 

と@AmitGuptaとしてクエリが答え:

DB::table("vendor_infos")->where($final_conditions)->orderByRaw("RAND()")->take(8)->get(); 
関連する問題