Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 使用查询范围加载相关模型_Laravel_Eloquent - Fatal编程技术网

Laravel 使用查询范围加载相关模型

Laravel 使用查询范围加载相关模型,laravel,eloquent,Laravel,Eloquent,假设我有一个模型框,其中包含许多小部件。小部件可以是活动的,也可以是非活动的(布尔值)。小部件模型具有可过滤结果的查询范围: models/box.php: 类框扩展了雄辩的 { 公共函数widgets() { 返回$this->hasMany('Widget'); } } models/widget.php: 类小部件扩展了雄辩的{ 公共功能盒() { 返回$this->belongsTo('Box'); } 公共函数作用域活动($query) { 返回$query->whiteactive

假设我有一个模型
,其中包含许多小部件。小部件可以是活动的,也可以是非活动的(布尔值)。
小部件
模型具有可过滤结果的查询范围:

models/box.php:

类框扩展了雄辩的
{
公共函数widgets()
{
返回$this->hasMany('Widget');
}
}
models/widget.php:

类小部件扩展了雄辩的{
公共功能盒()
{
返回$this->belongsTo('Box');
}
公共函数作用域活动($query)
{
返回$query->whiteactive(true);
}
}
查询范围可以轻松获取给定框的所有小部件:

$box\u widgets=box::find($box\u id)->widgets()->active()->get();
//返回包含已筛选的小部件数组的雄辩\集合
但是如何使用
scopeActive
方法的条件函数来消除这种急切的加载

$Box=Box::with(数组('widgets',函数($q)
{
$q->active();
}))->get();

似乎有一种访问关系作用域的速记方式,类似于
Box::with('widgets->active')
Box::with('widgets.active')
,但我一直找不到它

假设大多数情况下您只需要活动小部件,因此我建议:

public function widgets()
{
    return $this->hasMany('Widget')->whereActive(true);
}

public function widgetsDisabled()
{
    return $this->hasMany('Widget')->whereActive(false);
}
您可以设置更多,例如一次加载所有内容,就像现在一样

然后尽可能轻松地加载:

Box::with('widgets')... // loads only active

这正是我想要的,谢谢!只是澄清一下,这些都是盒子模型的方法。这还提供了具有不同名称的集合,这很好。是的,它们当然属于长方体模型。为像您这样的关系使用不同的名称确实很好,因为您可以使代码冗长且易于使用