Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Php Laravel检索有说服力的嵌套加载_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel检索有说服力的嵌套加载

Php Laravel检索有说服力的嵌套加载,php,laravel,eloquent,Php,Laravel,Eloquent,在我的应用程序中,我有4个相互关联的模型 Forms->categories->fields->triggers 我试图做的是获取引用当前表单的触发器 经过研究,我发现嵌套的渴望加载,这需要我的代码看起来像这样 Form::with('categories.fields.triggers')->get(); 通过对这些反应的观察,我可以清楚地看到这些关系一直到我想要的触发点 现在,我正在努力解决的部分只是获取触发器,而不是在每个模型中循环 我知道的代码是有效的: $f

在我的应用程序中,我有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');
    }
}

触发器在透视表中运行,但应该可以使用相同的方法访问?

我创建了一个
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)->触发器;