| 1: | <?php |
| 2: | |
| 3: | declare(strict_types=1); |
| 4: | |
| 5: | namespace Atk4\Data\Persistence\Array_; |
| 6: | |
| 7: | use Atk4\Data\Exception; |
| 8: | use Atk4\Data\Model; |
| 9: | use Atk4\Data\Persistence; |
| 10: | |
| 11: | class Join extends Model\Join |
| 12: | { |
| 13: | #[\Override] |
| 14: | protected function afterLoad(Model $entity): void |
| 15: | { |
| 16: | $model = $this->getOwner(); |
| 17: | |
| 18: | $foreignId = $entity->getDataRef()[$this->masterField]; |
| 19: | if ($foreignId === null) { |
| 20: | return; |
| 21: | } |
| 22: | |
| 23: | try { |
| 24: | $foreignData = Persistence\Array_::assertInstanceOf($model->getPersistence()) |
| 25: | ->load($this->createFakeForeignModel(), $foreignId); |
| 26: | } catch (Exception $e) { |
| 27: | throw (new Exception('Unable to load joined record', $e->getCode(), $e)) |
| 28: | ->addMoreInfo('table', $this->foreignTable) |
| 29: | ->addMoreInfo('id', $foreignId); |
| 30: | } |
| 31: | |
| 32: | $dataRef = &$entity->getDataRef(); |
| 33: | foreach ($model->getFields() as $field) { |
| 34: | if ($field->hasJoin() && $field->getJoin()->shortName === $this->shortName) { |
| 35: | $dataRef[$field->shortName] = $foreignData[$field->getPersistenceName()]; |
| 36: | } |
| 37: | } |
| 38: | } |
| 39: | } |
| 40: | |