2013-03-11 19 views
2

我正在使用Laravel和Eloquent类。我有三个模型。Laravel雄辩:计数项目模型关系

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(); 

这得到其具有蛞蝓和所有它的行程的城市。

我希望得到这样的列表:(其中文字行程类型和数量是计数)

History: 10 
Entertainment: 5 
Outdoor: 6 
... 
+0

只需删除这一个:area51.stackexchange.com/proposals/46607/laravel;) – Kriem 2013-03-11 15:25:42

回答

0

你不得不使用联接和位的原始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); 
}