2

LaravelとEloquentクラスを使用しています。私は3つのモデルを持っています。

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');
}

ご覧のとおり、都市には多くの旅程があり、旅程は都市と旅程タイプに属しています。itinerarytypeモデルには多くの旅程があります。

このwith()メソッドを使用して、旅程タイプにグループ化された旅程の数を取得することは可能ですか?

たとえば、これまでに私が持っているものは次のとおりです。

$city = City::with(array('itineraries'))->where_slug($city_slug)->first();

これは、そのナメクジとそのすべての旅程を持っている都市を取得します。

次のようなリストを取得したいのですが(テキストは旅程タイプで、番号はカウントです)

History: 10
Entertainment: 5
Outdoor: 6
...
4

1 に答える 1

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);
}
于 2013-03-11T15:21:37.550 に答える