在 Laravel 5.2 中使用 orWhere 查询范围

Jos*_*eph 2 php laravel eloquent laravel-5 laravel-5.2

使用 Laravel 5.2,我的模型具有以下查询范围:

public function scopeInProcess($query) {
    return $query->whereHas(
        'ApplicationStatus', function($query) {
            $query->whereRaw('(name = "New" OR name = "In-process")');
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但我才开始使用,whereRaw()因为我无法orWhere()按照文档中的描述开始工作。

据我所知,这应该与以下内容完全相同whereRaw()

$query->where('name', 'New')->orWhere('name' , 'In-process');
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。它只返回所有记录,包括具有其他状态名称的记录。

pat*_*cus 5

它没有做完全相同的事情。在您的 中whereRaw(),您将两个条件都括在括号中,以将它们组合在一起。这就是你想要的。但是,where()->orWhere()不会自动执行此操作。

要获得所需的功能,您需要对条件进行分组,就像在whereRaw(). 您可以通过将闭包传递给该where()方法来完成此操作,如下所示:

public function scopeInProcess($query) {
    return $query->whereHas('ApplicationStatus', function($query) {
        $query->where(function($q) {
            $q->where('name', 'New')->orWhere('name', 'In-process');
        });
    });
}
Run Code Online (Sandbox Code Playgroud)