我只想运行这样的查询:
select * from `users` where SUBSTRING_INDEX(`email`, '@' ,-1) not in ('gmail.com, outlook.com');
我想到了两种方法,它们都不起作用:1
$providers = array('gmail.com', 'outlook.com');
$providers = "'" . implode("', '", $providers) . "'";
User::whereRaw("SUBSTRING_INDEX(`email`, '@' ,-1) not in (?)", $providers);
以上将不起作用,因为 PDO 会转义 "'"字符。2
User::whereIn(DB::raw("SUBSTRING_INDEX(`email`, '@' ,-1)", $providers);
这个根本行不通。任何想法? 最佳答案
这是一种更安全的方法:
$providers = ['gmail.com', 'outlook.com'];
$placeholder = implode(', ', array_fill(0, count($providers), '?'));
User::whereRaw("SUBSTRING_INDEX(`email`, '@' ,-1) not in ($placeholder)", $providers);
关于php - Laravel 的 Eloquent whereIn 方法中的原始语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24476796/