阅读(3803) (11)

Laravel 8 在关联之后链式添加 orWhere 条件

2021-07-08 09:44:45 更新

如上所示,你可以在查询关联时自由添加其他约束。但是,在将 orWhere 子句链接到关联时要小心,因为 orWhere 子句将在逻辑上与关联约束处于同一级别:

$user->posts()
        ->where('active', 1)
        ->orWhere('votes', '>=', 100)
        ->get();

// select * from posts
// where user_id = ? and active = 1 or votes >= 100 

在大多数情况下,你可以使用 约束组 在括号中对条件检查进行逻辑分组:

use Illuminate\Database\Eloquent\Builder;

$user->posts()
        ->where(function (Builder $query) {
            return $query->where('active', 1)
                         ->orWhere('votes', '>=', 100);
        })
        ->get();

// select * from posts
// where user_id = ? and (active = 1 or votes >= 100)