2017-02-09 5 views
1

から変数結果にここで、()の使用:私は次のそれぞれに、との都市の完全なリストを印刷したい私はこのようなデータベース構造(簡素化するために)持ってLaravel 5クエリビルダ

pets table 
- id 
- name 
- owner_id 

owners table 
- id 
- name 
- city_id 

cities table 
- id 
- name 

をそのうちの1人、そこに住むペットの数。これは私がこの問題にアプローチしようとしていた方法です。問題は、それはもちろん、エラーがスローされますということです

@foreach($cities as $city) 
    <li> 
     {{ $city->name }}: // city name 
     {{ $pets->where('city_id', $city->id)->count() }} pets // number of pets in this city 
    </li> 
@endforeach 

:私のブレードテンプレートに

// get all pets and associate them with the matching owner record, so every pet has also a city where it lives in. 
$pets = DB::table('pets')->join('owners', 'pets.owner_id', '=', 'owners.id')->get(); 

// get all cities 
$cities = DB::table('cities')->get(); 

// pass values to the view 
return View('cities_stats',array('pets'=>$pets, 'cities'=>$cities)); 


これは私のコントローラ機能です。 $petsは配列なので、where()count(){{ $pets->where('city_id', $city->id)->count() }}に使用できません。
それでは何ができますか?

P.S.私はLaravel 5.0を使用しています。

答えて

0

簡潔にするために、逆にすることをお勧めします。あなたのビューで

$cities = City::with('owner.pets')->get(); 

$cities = DB::table('cities') 
->leftjoin('owners'...) 
->leftjoin('pets'...) 
->select(...) 
->get(); 

または使用熱心なロード、単にループと出来上がります!

0

ビルダー自体ではなく、照会結果を表示するには、渡す必要があります。だから今、それが配列でない->get()

$pets = DB::table('pets')->join('owners', 'pets.owner_id', '=', 'owners.id'); 

を削除します。

関連する問題