渴望加载和方法类型注入

时间:2016-12-22 20:41:10

标签: laravel laravel-5 eloquent eager-loading

我有一条只显示某种形式的路线:

Route::get('/form/{form}', 'FormController@show');

FormController中,感谢类型注入我自动将表单ID(从{form})转换为App\Form对象并在视图中显示:

public function show(Form $form){
    return view('form', compact('form'));
}

当我通过Eloquent查询构建器获得Form对象时,我可以急切地加载相关的元素/模型:

$form = App\Form::where('id', '1497')->with('subform')->get()

是否可以通过$form相关对象自动生成自动加载subform对象,或者我需要手动执行此操作:

public function show($id){
    $form = App\Form::where('id', $id)->with('subform')->get();
    return view('form', compact('form'));
}

2 个答案:

答案 0 :(得分:1)

要在路径中解析子窗体时自动延迟加载子窗体,您可以自定义路径模型绑定。使用boot() App\Providers\RouteServiceProvider方法定义自定义分辨率,如:

public function boot()
{
    parent::boot();

    Route::bind('form', function ($id) {
        return App\Form::with('subform')->find($id);;
    });
}

这会在自动加载子表单时将路由参数{form}解析为给定表单。

答案 1 :(得分:0)

您可以使用load()方法添加关系:

public function show(Form $form)
{
    return view('form', ['form' => $form->load('subform')]);
}