我正在使用Laravel和Eloquent课程。我有三个型号。
City.php:
public function itineraries() {
return $this->has_many('Itinerary', 'city_id');
}
Itinerary.php:
public function city()
return $this->belongs_to('City');
}
public function type()
{
return $this->belongs_to('Itinerarytype');
}
Itinerarytype.php:
public function itineraries()
{
return $this->has_many('Itinerary');
}
正如您所看到的,城市有许多行程,行程属于城市和行程类型。行程类型模型有很多行程。
使用with()
方法可以获得按行程类型分组的行程计数吗?
例如,这是我到目前为止所做的:
$city = City::with(array('itineraries'))->where_slug($city_slug)->first();
这可以让城市拥有那个slu and及其所有行程。
我希望得到一个列表:(文本是行程类型,数字是计数)
History: 10 Entertainment: 5 Outdoor: 6 ...
答案 0 :(得分:0)
你必须使用join和一些原始sql以高效的方式实现它:
$city = City::where_slug($slug)->first();
$types = ItineraryType::join('itineraries', 'itineraries.type_id', '=', 'itenerary_types.id')
->where('itineraries.city_id', '=', $city->id)
->group_by('itinerary_types.id')
->order_by('itinerary_count')
->get(array('itinerary_types.*', DB::raw('COUNT(itineraries.id) as itinerary_count')));
foreach ($types as $type) {
print($type->label . ': ' . $type->itinerary_count);
}