2016-04-12 23 views
1

Birkaç gün uğraşıyorum ama işe yaramayacağım.Laravel koleksiyonunu ilişkilendirme sayısı ile karşılaştır

Örnekte, Laravel model Test ve Sorularım var, Soru modelinde test_id özelliği var. Test koleksiyonunu, verilen testin test_id = kimliğiyle var olan soruların sayısına göre sıralamak istiyorum.

ben hem

$tests = Test::select(
     array(
      '*', 
      DB::raw('(SELECT count(*) FROM questions WHERE test_id = id) as count_questions')) 
    )->with('questions')->orderBy('count_questions','desc')->paginate(5); 

ve

$tests = Test::has('questions', '>', 3)->with('questions')->get()->sortBy(function($test) 
    { 
     return $test->questions->count(); 
    }); 

ama sonuç aynı, koleksiyon sıralanmamıştır olduğunu çalıştılar.

Önemliyse json yanıtı kullanıyorum ve $ test-> questions-> count(); Her test için soru sayısı alıyorum.

cevap

0

Şimdi bu durumda döndüğünüzde sıralama çalışmaz çıkıyor:

return response()->json($tests); 

ama böyle döndüğünüzde mükemmel çalışıyor: Benim Bunun için

return response()->json($tests->values()->all()); 

çok garip Davranış, daha önce hiç böyle bir şeyle karşılaşmadım, eğer birisi bunu açıklayabilirse şükredeceğim.