我一直无法加入我获取的多个结果,试图避免每个结果单独执行此操作。
基本上我有一个包含两种语言翻译的表格。 表格列为:
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个结果。
答案 0 :(得分:0)
我无法在此处看到您的查询,但我认为您可以在groupBy
方法后使用->get()
,否则您可以通过启用查询日志来检查查询。
DB::connection()->enableQueryLog();
// do your query here
$queries = DB::getQueryLog();`