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: