Php Laravel根据关系方法的结果加载关系

Php Laravel根据关系方法的结果加载关系,php,laravel,Php,Laravel,我拥有以下实体: 使用者 } 执照 然而,这并不完全正确——因为没有对“license.active”进行实际条件检查 如何返回由ID加载的用户,以及他们关联的、布尔“活动”变量设置为“true”的许可证?您可以使用即时加载约束来查询这样的关系 $user = User::with(array('license' => function($query){ $query->where('start', '<=', Carbon::now()) $query->

我拥有以下实体:

使用者

}

执照

然而,这并不完全正确——因为没有对“license.active”进行实际条件检查


如何返回由ID加载的用户,以及他们关联的、布尔“活动”变量设置为“true”的许可证?

您可以使用即时加载约束来查询这样的关系

$user = User::with(array('license' => function($query){
    $query->where('start', '<=', Carbon::now())
    $query->where('end', '>=', Carbon::now())
}))->find($id);
public function activeLicences(){
    return $this->hasMany('Licence', 'subid', 'member_id')->where('start', '<=', Carbon::now())->where('end', '>=', Carbon::now());
}

请注意:这尚未测试。

您已将$id作为参数传递给get方法,该方法要求加载列名而不是id。您认为这两种方法中哪一种是最好的?我意识到它们都达到了相同的结果,但在代码质量方面,您会使用哪一种?
return User::findOrFail($id)->with('licence.active')->get();
$user = User::with(array('license' => function($query){
    $query->where('start', '<=', Carbon::now())
    $query->where('end', '>=', Carbon::now())
}))->find($id);
public function activeLicences(){
    return $this->hasMany('Licence', 'subid', 'member_id')->where('start', '<=', Carbon::now())->where('end', '>=', Carbon::now());
}
$user = User::with('activeLicenses')->find($id)