Laravel雄辩的“哪里”保证秩序吗?

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)

还是更好的解决方案?

Jer*_*dev 6

不,它不会,并且与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)