无法在 not like 子句 Laravel 中传递多个值
Unable to pass multiple values in not like clause Laravel
我正在做一个 Laravel 项目,想 post 在一个 not like 子句中使用多个值。我尝试了以下方法,但没有成功。
$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.*']);
我也尝试过将它作为字符串传递,但仍然没有成功。
不能在用撇号包裹的字符串中使用数组。 where 函数的第三个参数中已经有 '%' 字符。你为什么在你的字符串中再次使用?
试试这个:
$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.*']);
你可以这样做,
$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.*']);
为什么不使用自定义查询!
$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();
我正在做一个 Laravel 项目,想 post 在一个 not like 子句中使用多个值。我尝试了以下方法,但没有成功。
$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.*']);
我也尝试过将它作为字符串传递,但仍然没有成功。
不能在用撇号包裹的字符串中使用数组。 where 函数的第三个参数中已经有 '%' 字符。你为什么在你的字符串中再次使用?
试试这个:
$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.*']);
你可以这样做,
$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.*']);
为什么不使用自定义查询!
$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();