2016-12-22 5 views
0

私はいくつかの形式を示す経路を有していますビュー:そのようなイーガーローディングと方法型注入

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

私は雄弁クエリビルダを通じてFormオブジェクトを取得すると、私は熱心な負荷関連できる要素/モデル:

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

subform関連オブジェクトと自動的に熱心な、自動ロード$formオブジェクトにそこの方法である、または私はそのようにそれを手動で行う必要があります:

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

答えて

0

あなたはload()メソッドを使用して関係を追加することができます。

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

ええ、コードを美しくするこの解決策ではありませんか?まだ2つの別個のDBクエリーを作成するか、間違っていますか? – Gacek

+0

とにかく2つのクエリを作成せずにモデルをリレーションで読み込むことはできません。モデルバインディングを使用していて、単にコードを美しくしています。 –

+0

AFAIK、熱心な読み込みはそれを行うと思われます - リレーションを限定したモデルを読み込みますN + 1の問題を避けるためのクエリの数 – Gacek

1

ルートで解決されたときにサブフォームを自動的に遅延ロードするには、ルートモデルのバインドをカスタマイズできます。 App\Providers\RouteServiceProviderboot()方法でカスタム解像度を定義するには、好き:自動的にサブフォームをロード中に

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

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

これは、指定されたフォームにごルートパラメータ{form}を解決します。

関連する問題