Предполагая, что родительский контракт имеет те же ключи, что и дочерний, вы можете использовать значение $key
из child
для доступа к соответствующему родительскому перку:
$parent_perks = $this->getParentContract($this->contract->parent_id)->perks;
foreach ($this->contract->perks as $key => $perk) {
PDF::writeHTMLCell(50, 0, $x, '', $parent_perks[$key]->allotment, 1, 0, 1, true, 'C', true);
PDF::writeHTMLCell(50, 0, '', '', $perk->perk_name, 1, 0, 1, true, 'C', true);
PDF::writeHTMLCell(50, 0, '', '', $perk->allotment, 1, 1, 1, true, 'C', true);
}
Если контракты могут иметьразличное количество перков, вам нужно найти, какое из них имеет наибольшее количество перков, и использовать его для управления циклом:
$parent_perks = array_values($this->getParentContract($this->contract->parent_id)->perks);
$perks = array_values($this->contract->perks);
$count_perks = max(count($parent_perks), count($perks));
for ($i = 0; $i < $count_perks; $i++) {
PDF::writeHTMLCell(50, 0, $x, '', $parent_perks[$i]->allotment ?? '', 1, 0, 1, true, 'C', true);
PDF::writeHTMLCell(50, 0, '', '', $perks[$i]->perk_name ?? $parent_perks[$i]->perk_name, 1, 0, 1, true, 'C', true);
PDF::writeHTMLCell(50, 0, '', '', $perks[$i]->allotment ?? '', 1, 1, 1, true, 'C', true);
}