Laravel Eloquent whereIn方法中的原始语句

Ami*_*mir 2 php pdo laravel eloquent laravel-4

我只想运行这样的查询:

select * from `users` where SUBSTRING_INDEX(`email`, '@' ,-1) not in ('gmail.com, outlook.com');
Run Code Online (Sandbox Code Playgroud)

有两种方法使我无法解决:

1个

$providers = array('gmail.com', 'outlook.com');

$providers = "'" . implode("', '", $providers) . "'";

User::whereRaw("SUBSTRING_INDEX(`email`, '@' ,-1) not in (?)", $providers);
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为PDO将转义“'”字符。

2

User::whereIn(DB::raw("SUBSTRING_INDEX(`email`, '@' ,-1)", $providers);
Run Code Online (Sandbox Code Playgroud)

这根本行不通。任何的想法?

Jos*_*ber 5

这是一种更安全的方法:

$providers = ['gmail.com', 'outlook.com'];

$placeholder = implode(', ', array_fill(0, count($providers), '?'));

User::whereRaw("SUBSTRING_INDEX(`email`, '@' ,-1) not in ($placeholder)", $providers);
Run Code Online (Sandbox Code Playgroud)