laravel 8 查询构建器中不同数据类型的复杂连接

Complex join with different data types in laravel 8 query builder

我有两个表 Infosnationalities,如下所示:

1) Table 信息:

id(pk) name nationality(varchar) accept multiple nationalities
1 John 1,2,3
2 Camilia 2,4

1) Table 国籍:

id(pk) int desig
1 German
2 Turkey
3 Algeria
4 Qatar

我想在输出中得到这样的东西:

desig count
German 1
Turkey 2
Algeria 1
Qatar 1

为此,我尝试了类似的方法(但没有帮助):

$total_nationalite = DB::table('infos')
                    ->select('desig', 'nationalities.id',DB::raw('COUNT(*) as count'))
                    ->join('nationalities', DB::raw('CAST(nationalities.id as varchar)'), '=', 'infos.nationality')
                    ->groupBy('desig','nationalities.id')
                    ->get();

请使用 查询构建器 postgres 中的简单查询提出任何建议。

nationality 字段中使用逗号分隔的值文本列表是个坏主意。有一个整数数组,或者 - 更好 - 一个规范化设计。不管怎样,这是一个本地查询解决方案。

select desig, count(*) count  
from
(
  select unnest(string_to_array(nationality, ','))::integer nat_id 
  from infos
) t
join nationalities n on t.nat_id = n.id
group by desig;

DB Fiddle

desig count
German 1
Qatar 1
Algeria 1
Turkey 2