无法在不喜欢的子句Laravel中传递多个值

时间:2016-12-22 05:52:54

标签: php laravel-5.1 laravel-query-builder

我正在开发一个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.*']);

我也尝试将其作为字符串传递,但仍然没有成功。

3 个答案:

答案 0 :(得分: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.*']);

我希望这会起作用

修改

或者您可以尝试其他方式。

$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.*']);    

答案 1 :(得分:0)

您不能在由撇号包装的字符串中使用数组。你函数的第三个参数中已经有'%'字符。为什么你在琴弦中再次使用?

试试这个:

 $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.*']);

答案 2 :(得分:0)

为什么不使用自定义查询!

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

简单而且无论$exclude_emails的大小是多少。

Laravel Way:

如果你坚持用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();