首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >belongsTo方法中的Laravel雄辩模型集条件

belongsTo方法中的Laravel雄辩模型集条件
EN

Stack Overflow用户
提问于 2016-03-31 09:24:35
回答 3查看 2.7K关注 0票数 2

我有一个模型类ServiceAgentRel。其中agent_id属于用户表。我正在用service_id 3获取所有列。

代码语言:javascript
复制
 $agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')->get();

使用此代码,我可以使用service_id 3获得所有服务,但如果用户状态(与该agent_id对应的状态)不活动,则需要在user表上设置一个条件,不会获取任何行。我的主要要求是,我必须为关系函数代理()设置一个条件。还有从控制器那里检查它的方法吗?

代码语言:javascript
复制
class ServiceAgentRel extends Model {
    public function agent(){
        return $this->belongsTo('App\User', 'agent_id', 'id');
    }
}

我知道通过一个简单的联接就可以完成这个任务,但是我想知道是否可以通过雄辩的模型函数来完成这个任务。谢谢在这里输入图像描述

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-31 09:38:30

为此您需要使用whereHas,就像这样

代码语言:javascript
复制
$agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')
->whereHas('agent',function($query) {
 $query->where('status', 'active');
})->get();
票数 5
EN

Stack Overflow用户

发布于 2016-03-31 09:29:27

嗨,你可以这样做

代码语言:javascript
复制
$agent_data = App\ServiceAgentRel::where(['service_id'=>3])->first();

echo $agent_data->agent->name;
票数 0
EN

Stack Overflow用户

发布于 2016-03-31 09:35:33

您可以使用以下语句:

代码语言:javascript
复制
$agent_data = App\ServiceAgentRel::where(['service_id'=>3])
  ->with(['agent' => function($query) {
      $query->where('agent.status', 'active');
  }])->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36329295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档