@@ -453,7 +453,7 @@ protected function getAndUnsetReindexedSaveBuffer(Model $entity): array
453
453
/**
454
454
* @param mixed $value
455
455
*/
456
- public function setSaveBufferValue (Model $ entity , string $ fieldName , $ value ): void
456
+ protected function setSaveBufferValue (Model $ entity , string $ fieldName , $ value ): void
457
457
{
458
458
$ entity ->assertIsEntity ($ this ->getOwner ());
459
459
@@ -476,6 +476,22 @@ protected function afterLoad(Model $entity): void
476
476
{
477
477
}
478
478
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
+
479
495
/**
480
496
* @param array<string, mixed> $data
481
497
*/
@@ -485,6 +501,8 @@ protected function beforeInsert(Model $entity, array &$data): void
485
501
return ;
486
502
}
487
503
504
+ $ this ->initSaveBuffer ($ entity , false );
505
+
488
506
// the value for the masterField is set, so we are going to use existing record anyway
489
507
if ($ entity ->get ($ this ->masterField ) !== null ) {
490
508
return ;
@@ -512,6 +530,8 @@ protected function afterInsert(Model $entity): void
512
530
return ;
513
531
}
514
532
533
+ $ this ->initSaveBuffer ($ entity , false );
534
+
515
535
$ id = $ entity ->getId ();
516
536
$ this ->assertReferenceIdNotNull ($ id );
517
537
@@ -531,6 +551,8 @@ protected function beforeUpdate(Model $entity, array &$data): void
531
551
return ;
532
552
}
533
553
554
+ $ this ->initSaveBuffer ($ entity , true );
555
+
534
556
if (!$ this ->issetSaveBuffer ($ entity )) {
535
557
return ;
536
558
}
0 commit comments