【问题标题】:Laravel Eloquent: Count items model relationshipLaravel Eloquent:计数项目模型关系
【发布时间】: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 ;)

标签: php orm laravel eloquent


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 2021-10-01
    • 2018-10-20
    • 2021-07-04
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多