2016-05-14 10 views
1

Laravelでは、これら2つの関数呼び出しの違いは何ですか?Laravel Lazy Eagerによる異なる結果ロード

$this->load(['episodes.item.cast' => function ($q) use (&$cast) { 
    $cast = $q->get()->groupBy("id"); 
}]); 

$cast = $this->load('episodes.item.cast')->get()->groupBy("id"); 

彼らは異なる結果を生成するが、私は理由を理解していません。

答えて

1

loadを使用しているため、$thisは既に存在するオブジェクトだとします。既存の意味では、$this->exists => trueを意味します。

そしてそこにポイントがあります。最初のクエリはOKですが、実際には奇妙です。しかし、第二は大丈夫ではない。既存のオブジェクトに->get()を使用すると、新しい空のクエリを作成してすべての値を取得します。

したがって、たとえばオブジェクト$obj = YourModel::find(1)を既にクエリしてから$obj->get()を実行すると、YourModel::all()と同じ結果になります。

+0

いいえ。だから、最初のクエリは私が奇妙な方法で望む結果を与える。どのように私はそれを書き換えることができますが、同じ結果を得ることができますか?何が「不思議」なのでしょうか? –

関連する問題