我有一个模型类ServiceAgentRel。其中agent_id属于用户表。我正在使用service_id 3获取所有列。
$agent_data = App\ServiceAgentRel::where(['service_id'=>3])->with('agent')->get();
使用此代码我可以使用service_id获取所有服务3但是如果用户状态(对应于该agent_id的状态)处于非活动状态,则需要在用户表上设置条件,不会获取任何行。 我的主要要求是,我必须在关系函数agent()上设置一个条件。还有什么方法可以从控制器检查它吗?
class ServiceAgentRel extends Model {
public function agent(){
return $this->belongsTo('App\User', 'agent_id', 'id');
}
}
我知道可以通过简单的连接来完成这项任务,但我想通过雄辩的模型函数来了解它是否可行。 谢谢 在此处输入图像描述
答案 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();