Laravel Eloquent:计数项目模型关系
Posted
技术标签:
【中文标题】Laravel Eloquent:计数项目模型关系【英文标题】:Laravel Eloquent: Count items model relationship 【发布时间】:2013-02-26 17:33:39 【问题描述】:我正在使用 Laravel 和 Eloquent 类。我有三个模型。
City.php:
public function itineraries()
return $this->has_many('Itinerary', 'city_id');
行程.php:
public function city()
return $this->belongs_to('City');
public function type()
return $this->belongs_to('Itinerarytype');
行程类型.php:
public function itineraries()
return $this->has_many('Itinerary');
如您所见,一个城市有许多行程,一个行程属于一个城市和一个行程类型。 itinerarytype 模型有很多行程。
使用with()
方法是否可以获得分组为行程类型的行程计数?
例如,这是我目前所拥有的:
$city = City::with(array('itineraries'))->where_slug($city_slug)->first();
这将获取拥有该蛞蝓的城市及其所有行程。
我想得到一个类似的列表:(其中文本是行程类型,数字是计数)
History: 10 Entertainment: 5 Outdoor: 6 ...
【问题讨论】:
只删除这个:area51.stackexchange.com/proposals/46607/laravel ;) 【参考方案1】:您必须使用 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);
【讨论】:
以上是关于Laravel Eloquent:计数项目模型关系的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 4 中使用五个模型的 Eloquent 映射表关系
Laravel Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法