Landra方法

时间:2016-03-31 09:24:36

标签: laravel eloquent

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

 $agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')->get();

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

class ServiceAgentRel extends Model {
    public function agent(){
        return $this->belongsTo('App\User', 'agent_id', 'id');
    }
}

我知道可以通过简单的连接来完成这项任务,但我想通过雄辩的模型函数来了解它是否可行。 谢谢 在此处输入图像描述

3 个答案:

答案 0 :(得分:4)

为此你需要使用whereHas,就像那样

$agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')
->whereHas('agent',function($query) {
 $query->where('status', 'active');
})->get();

答案 1 :(得分:0)

嗨,你可以这样做

$agent_data = App\ServiceAgentRel::where(['service_id'=>3])->first();

echo $agent_data->agent->name;

答案 2 :(得分:0)

您可以使用以下声明:

$agent_data = App\ServiceAgentRel::where(['service_id'=>3])
  ->with(['agent' => function($query) {
      $query->where('agent.status', 'active');
  }])->get();