首页 > 解决方案 > Laravel 有关于 where 的功能

问题描述

我目前正在使用此功能来收集所有有关系的用户

    $users = users::with(array('statusCurrent' => function($query)
    {
        $query->where('status.status', 'in');
        $query->orderBy('status.date', 'DESC');
    }));
    $users = $users->get();

这会返回我的两个用户,如果status = 'in'它也返回关系,但如果status = 'out'它仍然返回行,但带有status_current = null.

with基本上,如果查询构建器函数中的参数不正确,我想完全忽略用户。

我试图$candidates = $candidates->has('statusCurrent')->get();尝试只获得关系不为空的结果,但它仍然返回 StatusCurrent 关系为空的用户。

我该怎么做才能让 foreach 用户,如果我传入的任何参数with(array('statusCurrent' => function(){})都不正确,它会被完全忽略?

编辑

用户模型

public function statusCurrent(){
    return $this->hasOne('App\Status', 'user_id', 'id')->orderBy('date', 'desc')->limit(1);
}

用户可以有许多状态',但该StatusCurrent关系旨在根据status.date

标签: phplaravellaravel-5eloquent

解决方案


您需要whereHas根据他们的关系过滤掉用户

$users = users::with(array('statusCurrent' => function($query)
    {  
        $query->orderBy('status.date', 'DESC');
    }))
    ->whereHas('statusCurrent', function ($query) {
        $query->where('status', 'in');
    })
    ->get();

查询关系存在


推荐阅读