我有这样的数据库结构(为了简化):
pets table
- id
- name
- owner_id
owners table
- id
- name
- city_id
cities table
- id
- name
我想打印完整的城市列表,其中每个城市旁边都有居住在那里的宠物数量。这就是我试图解决这个问题的方法:
这是我的控制器功能:
// 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));
在我的Blade模板上:
@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
问题在于它当然会抛出错误。我不能在where()
中同时使用count()
和{{ $pets->where('city_id', $city->id)->count() }}
,因为$pets
是一个数组。
那我该怎么办?
P.S。我正在使用Laravel 5.0。
答案 0 :(得分:0)
为了简单起见,我建议你做反过来。
$cities = DB::table('cities')
->leftjoin('owners'...)
->leftjoin('pets'...)
->select(...)
->get();
或使用预先加载
$cities = City::with('owner.pets')->get();
在你看来,你只需循环而瞧!
答案 1 :(得分:0)
您应该传递查看非查询结果,但查看构建器本身。所以只需删除->get()
$pets = DB::table('pets')->join('owners', 'pets.owner_id', '=', 'owners.id');
现在它不是数组。