替换数组中的元素而不是使用 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();
我有两个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();