我只想运行这样的查询:

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/

10-12 17:52