Riz*_*yid 2 sql laravel eloquent
例如,这样做:
Model::where('role', 'all')->orWhere('role','user')->first();
Run Code Online (Sandbox Code Playgroud)
始终获得角色首先为“ all”的模型,因为where()的声明早于orWhere()?
还是我不应该信任它,并且总是检查是否?
$foo = new Model;
$bar = $foo->where('role', 'all')->first();
if(empty($bar)){
$bar = $foo->where('role','user')->first();
}
Run Code Online (Sandbox Code Playgroud)
还是更好的解决方案?
不,它不会,并且与Laravel无关,这就是SQL的工作方式。
查询生成器将生成以下SQL语句:
SELECT * FROM Model WHERE `role` = 'all' OR `role` = 'user' LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
您获得行的顺序将是它们在Model表中的顺序。如果要对行进行排序,则必须对查询应用顺序,例如:
Model::where('role', 'all')
->orWhere('role','user')
->orderByRaw('CASE role WHEN \'all\' THEN 1 ELSE 2 END DESC')
->first();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |