【发布时间】:2018-07-28 08:53:03
【问题描述】:
在我的应用程序中,我有 4 个相互关联的模型。
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');
}
}
触发器通过数据透视表运行,但应该可以使用相同的方法访问?
【问题讨论】: