sle*_*ess 3 php laravel laravel-4
我目前面临一个小问题.我想仅在存在具有特定条件的关系时才返回模型.使用whereHas()方法可以正常工作.
$m = Model
::whereHas(
'programs',
function($q) {
$q->active();
}
);
Run Code Online (Sandbox Code Playgroud)
但是,将关系称为此类属性将为我提供所有(未过滤结果).
$m->programs;
Run Code Online (Sandbox Code Playgroud)
基本上我现在正在做的是:
$m = Model
::whereHas(
'programs',
function($q) {
$q->active();
}
)
->with(array('programs' => function($q) {
$q->active();
}))
;
Run Code Online (Sandbox Code Playgroud)
这工作正常但我觉得再次做同样的事情非常糟糕.这不是正确的方法.如何在不重复代码的情况下实现这一目标?
小智 5
如果"活动程序"的概念在您的应用程序中很重要,请考虑为活动程序创建单独的关系(在这种情况下,我假设您具有HasMany关系):
class Model
{
public function activePrograms()
{
return $this->hasMany(Program::class)->active();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将查询简化为:
Model::with('activePrograms')->has('activePrograms')->get();
Run Code Online (Sandbox Code Playgroud)