替换数组中的元素而不是使用 join() 创建新元素

Replace element in array instead of making new one with join()

我有两个table,一个有两个外键,一个有ids和对应的subject。我想在我的控制器中创建一个函数,returns 一个数组,其中包含 table 1 中的所有数据,除了主题 ID 应该替换为另一个 table 中的实际主题.

我目前 运行 遇到的问题是,我在数组中加入了具有相同元素名称的两个主题,导致其中一个覆盖了另一个。我怎样才能使它们都不同,或者它们只是覆盖数组中的 id。我希望这是有道理的,如果没有,请在评论中要求澄清。

我的两个table

table 1: (klasgenoten)

纳姆 verplicht_profielvak1 verplicht_profielvak2 等..
约翰 1 2

Table 2: (verplicht_profielvakken)

id profielvak
1 数学
2 科学

我的加入代码:

$builder = $db->table('klasgenoten'); // welke table gaat het over
        $builder->join('verplicht_profielvakken', 'klasgenoten.verplicht_profielvak1 = verplicht_profielvakken.id');
        $builder->select('klasgenoten.*, verplicht_profielvakken.profielvak');
        $query = $builder->get();
        $verplicht_profielvak1 = $query->getResultArray();

这个 returns 一个包含元素 verplicht_profielvak1 profielvak 的数组。这样做的问题是,如果我想加入多个主题,它们会相互覆盖。示例:

上面 table 中的约翰在这种情况下只会有科学,因为那门学科覆盖了数学。

我尝试过的:

不同类型的联接,手动替换值的 foreach 循环,重新排列我的代码,尝试别名但效果不佳,查看了几个 Whosebug 问题,我发现所有这些问题都不适用我的情况。

有人知道怎么做吗?

您必须为 klasgenoten 的每一列使用连接 table。由于结果将存储在一个数组中,多个键将被覆盖。您必须像这样为每个连接指定一个别名:

$builder = $db->table('klasgenoten'); // welke table gaat het over
// Note the alias of the table here
$builder->join('verplicht_profielvakken as vp1', 'klasgenoten.verplicht_profielvak1 = verplicht_profielvakken.id');
// Note the alias of the table here
$builder->join('verplicht_profielvakken as vp2', 'klasgenoten.verplicht_profielvak2 = verplicht_profielvakken.id');
// Select profielvak from each join with an unique alias
$builder->select('klasgenoten.*, vp1.profielvak as profilevak1, vp2.profielvak as profilevak2');
$query = $builder->get();
$verplicht_profielvak1 = $query->getResultArray();