【问题标题】:Laravel has on where functionLaravel 有关于 where 的功能
【发布时间】:2018-06-04 11:19:47
【问题描述】:

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

    $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 关系为空的用户。

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

编辑

用户模型

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

用户可以有很多状态',但StatusCurrent 关系是为了返回基于status.date 的最近状态1

【问题讨论】:

  • 尝试不使用status.,例如->where('status', 'in');->orderBy('date', 'DESC');
  • 用户的最新状态必须是in吗?

标签: php laravel laravel-5 eloquent


【解决方案1】:

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

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

Querying Relationship Existence

【讨论】:

  • 这仍然返回两个用户,如果有帮助,我已经编辑了问题并包含了模型关系。
猜你喜欢
  • 2021-08-24
  • 2016-11-30
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多