Skip to content

Commit 75dd90c

Browse files
committed
move Join data passing from Model
1 parent 84f049a commit 75dd90c

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/Model.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -1510,9 +1510,7 @@ public function save(array $data = [])
15101510
continue;
15111511
}
15121512

1513-
if ($field->hasJoin()) {
1514-
$field->getJoin()->setSaveBufferValue($this, $name, $value);
1515-
} else {
1513+
if (!$field->hasJoin()) {
15161514
$data[$name] = $value;
15171515
}
15181516
}
@@ -1542,7 +1540,6 @@ public function save(array $data = [])
15421540

15431541
if ($field->hasJoin()) {
15441542
$dirtyJoin = true;
1545-
$field->getJoin()->setSaveBufferValue($this, $name, $value);
15461543
} else {
15471544
$data[$name] = $value;
15481545
}

src/Model/Join.php

+23-1
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ protected function getAndUnsetReindexedSaveBuffer(Model $entity): array
453453
/**
454454
* @param mixed $value
455455
*/
456-
public function setSaveBufferValue(Model $entity, string $fieldName, $value): void
456+
protected function setSaveBufferValue(Model $entity, string $fieldName, $value): void
457457
{
458458
$entity->assertIsEntity($this->getOwner());
459459

@@ -476,6 +476,22 @@ protected function afterLoad(Model $entity): void
476476
{
477477
}
478478

479+
protected function initSaveBuffer(Model $entity, bool $fromUpdate): void
480+
{
481+
foreach ($entity->get() as $name => $value) {
482+
$field = $entity->getField($name);
483+
if (!$field->hasJoin() || $field->getJoin()->shortName !== $this->shortName || $field->readOnly || $field->neverPersist || $field->neverSave) {
484+
continue;
485+
}
486+
487+
if ($fromUpdate && !$entity->isDirty($name)) { // TODO double check no action is really taken when the save buffer is unset
488+
continue;
489+
}
490+
491+
$field->getJoin()->setSaveBufferValue($entity, $name, $value);
492+
}
493+
}
494+
479495
/**
480496
* @param array<string, mixed> $data
481497
*/
@@ -485,6 +501,8 @@ protected function beforeInsert(Model $entity, array &$data): void
485501
return;
486502
}
487503

504+
$this->initSaveBuffer($entity, false);
505+
488506
// the value for the masterField is set, so we are going to use existing record anyway
489507
if ($entity->get($this->masterField) !== null) {
490508
return;
@@ -512,6 +530,8 @@ protected function afterInsert(Model $entity): void
512530
return;
513531
}
514532

533+
$this->initSaveBuffer($entity, false);
534+
515535
$id = $entity->getId();
516536
$this->assertReferenceIdNotNull($id);
517537

@@ -531,6 +551,8 @@ protected function beforeUpdate(Model $entity, array &$data): void
531551
return;
532552
}
533553

554+
$this->initSaveBuffer($entity, true);
555+
534556
if (!$this->issetSaveBuffer($entity)) {
535557
return;
536558
}

0 commit comments

Comments
 (0)