Laravel groupBy但保留其他值

时间:2017-11-03 08:52:06

标签: php laravel join laravel-5 group-by

我一直无法加入我获取的多个结果,试图避免每个结果单独执行此操作。

基本上我有一个包含两种语言翻译的表格。 表格列为:

id | service_id | name | slug | lang

示例输入(相同的服务只是不同的翻译):

service_id: 1, name: 'Igre', slug: 'igre', lang: 'hr'

service_id: 1, name: 'Games', slug: 'games', lang: 'en'

现在我尝试根据service_id加入这些行,而不会丢失或覆盖其他值。

示例(我希望我的输出基于上面的两行):

service_id: 1, name_hr: 'Igre', name_en: 'Games', slug_hr: 'igre', slug_en: 'games'

或接近这一点,主要是基于id将所有内容组合到一个数组字段中,而不会丢失其他数据。我尝试过使用groupBy(),但总是会有一个值覆盖另一个值。

修改

$service = Service::with(['subservice' => function($query){
        $query->leftJoin('subservice_translations', 'subservices.id', 'subservice_translations.subservice_id');
        $query->select('subservices.*', 'subservice_translations.name as name', 'subservice_translations.lang as lang');
    }])
    ->join('service_translations', 'services.id', 'service_translations.service_id')
    ->select('services.*', 'service_translations.name as name', 'service_translations.lang as lang')
    ->where('services.id', $id)
    ->orderByRaw("FIELD(lang , 'hr', 'en') ASC")
    ->get();

这是我目前的查询。两个服务'和' 子服务'有翻译。一个服务'可以有多个' 子服务'也有翻译。因此,如果我输入5' 子服务'对于我的服务'我实际上输入的是10(' hr'以及' en')。我不希望我的查询结果有10个结果,但是我在上面的示例中输出了5个结果。

1 个答案:

答案 0 :(得分:0)

我无法在此处看到您的查询,但我认为您可以在groupBy方法后使用->get(),否则您可以通过启用查询日志来检查查询。

DB::connection()->enableQueryLog(); 
// do your query here
$queries = DB::getQueryLog();`