Php Laravel检索有说服力的嵌套加载
在我的应用程序中,我有4个相互关联的模型Php Laravel检索有说服力的嵌套加载,php,laravel,eloquent,Php,Laravel,Eloquent,在我的应用程序中,我有4个相互关联的模型 Forms->categories->fields->triggers 我试图做的是获取引用当前表单的触发器 经过研究,我发现嵌套的渴望加载,这需要我的代码看起来像这样 Form::with('categories.fields.triggers')->get(); 通过对这些反应的观察,我可以清楚地看到这些关系一直到我想要的触发点 现在,我正在努力解决的部分只是获取触发器,而不是在每个模型中循环 我知道的代码是有效的: $f
Forms->categories->fields->triggers
我试图做的是获取引用当前表单的触发器
经过研究,我发现嵌套的渴望加载,这需要我的代码看起来像这样
Form::with('categories.fields.triggers')->get();
通过对这些反应的观察,我可以清楚地看到这些关系一直到我想要的触发点
现在,我正在努力解决的部分只是获取触发器,而不是在每个模型中循环
我知道的代码是有效的:
$form = Form::findOrFail($id);
$categories = $form->categories;
foreach ($categories as $category) {
$fields = $category->fields;
foreach ($fields as $field) {
$triggers[] = $field->triggers;
}
}
我知道这是可行的,但可以简化吗?是否可以写:
$form = Form::with('categories.fields.triggers')->get()
$triggers = $form->categories->fields->triggers;
让触发器相关?从现在开始执行此操作将导致:
Undefined property: Illuminate\Database\Eloquent\Collection::$categories
因为它试图在集合上运行$form->categories
我该怎么做呢?我是否需要在我的模型上使用HasManyThrough
关系
我的车型
class Form extends Model
{
public function categories()
{
return $this->hasMany('App\Category');
}
}
class Category extends Model
{
public function form()
{
return $this->belongsTo('App\Form');
}
public function fields()
{
return $this->hasMany('App\Field');
}
}
class Field extends Model
{
public function category()
{
return $this->belongsTo('App\Category');
}
public function triggers()
{
return $this->belongsToMany('App\Trigger');
}
}
class Trigger extends Model
{
public function fields()
{
return $this->belongsToMany('App\Field');
}
}
触发器在透视表中运行,但应该可以使用相同的方法访问?我创建了一个
HasManyThrough
关系,该关系具有无限级别,并支持belongTomany
:安装后,您可以这样使用它:
类形式扩展模型{
使用\Staudenmeir\elokenthasmanydeep\hassrelationships;
公共函数触发器(){
返回$this->hasManyDeep(Trigger::class、[Category::class,Field::class,'Field_Trigger']);
}
}
表单::with('triggers')->get();
表单::findOrFail($id)->触发器;
我创建了一个具有无限级别的HasManyThrough
关系,并支持归属关系
:安装后,您可以这样使用它:
类形式扩展模型{
使用\Staudenmeir\elokenthasmanydeep\hassrelationships;
公共函数触发器(){
返回$this->hasManyDeep(Trigger::class、[Category::class,Field::class,'Field_Trigger']);
}
}
表单::with('triggers')->get();
表单::findOrFail($id)->触发器;