Laravel模型与Where& amp;的关系或者声明

时间:2018-06-03 03:38:56

标签: laravel laravel-5 eloquent

我的控制器中有以下内容:

            $documents = $equipment->attachments()
                ->where('attachmentCategory','=','Document')
                ->orWhere('attachmentCategory','=','Vehicle Title')
                ->get();

但是当attachmentCategory等于Document的文档返回正常时,它会继续使用Vehicle Title attachmentCategory引入所有文档,即使我只是尝试使用此语句在哪里和它Vehicle Title它只会返回一个文件(这是正确的)。

这是我在我的函数中定义的关系,这在其他任何地方都没有让我失望,所以我知道它在上面的控制器语句中,我只是把它放在这里以防万一。

public function attachments()
{
    return $this->hasMany(EquipmentAttachment::class,'unitID','id');
}

如果你能纠正上面的陈述,那就太好了。我希望只有在他们有DocumentVehicle Title的附件类别的情况下才能将文件归还给我。

2 个答案:

答案 0 :(得分:1)

这似乎可能是一个Laravel错误。我会测试一下。

这是解决方案:

$documents = $equipment->attachments()
    ->where(function ($q) {
        $q
            ->where('attachmentCategory','=','Document')
            ->orWhere('attachmentCategory','=','Vehicle Title');
    })
    ->get();

答案 1 :(得分:1)

我希望只有文件或车辆标题的附件类别才能将文件归还给我。

从上面我假设您需要对相关集合应用过滤器,如果它与给定条件匹配,则返回主对象,如Querying Relationship Existence

$documents = $equipment->whereHas('attachments', function ($query) {
                            $query->whereIn('attachmentCategory', ['Document', 'Vehicle Title']);
                        })
                        ->get();