2016-05-24 12 views
0

私は多くの個別モデルを持っており、それらをすべて組み合わせてeagerloadingを利用したいと考えています。LaravelとEagerの負荷関係で複数の個別の雄弁なモデルを組み合わせる方法

$match_query = "select * from feeds " . 
       "WHERE (user_id IN ($users_size)) " . 
       "OR (target_id IN ($slugs_size) AND feedable_type = 'review') " . 
       "ORDER BY created_at DESC LIMIT 5;"; 

//Query works fine and return 2 results 
$results = DB::select($match_query, $consolidatedArray); 

    //to convert returned php standard obj to array 
    $results = json_decode(json_encode($results), True); 

    $all = []; 

    foreach($results as $result){ 
     $x = new \App\Feed($result); 

     //I am able to get relation like this for single item 
     // $x->user; 

     $all[] = $x; 
    } 

    //but this thing is not working (i am trying to eager load) 
    $data = $all->with('user'); 

私は解決策は何

ErrorException in FeedsRepository.php line 67: 
Trying to get property of non-object 

次のエラーを取得しますか?

+0

は、なぜあなたはDBクラスを使用していますか? 'SomeEloquentModel :: with( 'user') - > get();' – Steve

+0

のような必要な雄弁なクラスを使用しないと、私のクエリが複雑すぎます。補題はコードにも追加してください... – Eirtaza

+0

これは複雑ではありません...配列の中の要素ではなく配列の 'with()'メソッドを呼び出すので、とにかく動作しませんそれ。 – phaberest

答えて

0

$はすべて配列です。配列はオブジェクトではありません。したがって、$ all-> with()を呼び出すと、 "非オブジェクトのプロパティを取得しようとしています"というエラーが表示されます。かなり簡単:)。

あなたのコードは不必要に畳み込まれているようです。 EloquentとQuery Builderではクエリが難しくありません。ドキュメントを少し読んで、あなたの方法をハッキングするのではなく素晴らしい機能を使用してください:)。

あなたのコードは、このはるかに読みやすいスニペット(またはこのようなもの)に置き換えることができます:

$results = Feed::whereIn('user_id', $users_size) 
      ->orWhere(function($q) use($slugs_size) { 
       $q->whereIn('target_id', $slugs_size)->orWhere('feedable_type', 'review'); 
      }) 
      ->with('user') 
      ->orderBy('created_at', 'desc')->take(5)->get(); 

ここで覚えておくべき重要なことは、雄弁でも、クエリビルダのすべての力をパックということです。ほとんどの場合、完全なSQLクエリーよりも読みやすく、管理しやすくなります。

読み物:

https://laravel.com/docs/master/eloquent

https://laravel.com/docs/master/queries

+0

それは動作します...ちょうど新しいfeedable_type – Eirtaza

+0

がどこかで置き換えられなければなりませんか? – lagbox

+0

もう1つの質問はこちらにリンクしています。http://stackoverflow.com/questions/37415347/eager-loading-only-few-relations-in-laravel-depending-upon-morphto – Eirtaza

関連する問題