uebernimmZuordnung(); }); } protected function uebernimmZuordnung(): void { $eltern = $this->zuordnungsEltern(); if ($eltern === null) { return; } $this->gleicheZuordnungAn($eltern, [ 'mandant_id' => $eltern->getAttribute('mandant_id'), 'land' => $eltern->getAttribute('land'), 'projekt_id' => $eltern instanceof Projekt ? $eltern->getKey() : $eltern->getAttribute('projekt_id'), ]); } /** * Setzt fehlende Werte und weist abweichende ab. * * @param array $werte */ protected function gleicheZuordnungAn(Model $anderes, array $werte): void { foreach ($werte as $spalte => $wert) { $eigen = $this->getAttribute($spalte); if ($eigen === null) { $this->setAttribute($spalte, $wert); } elseif (self::vergleichswert($eigen) !== self::vergleichswert($wert)) { throw new LogicException(sprintf( '%s: %s passt nicht zu %s.', class_basename($this), $spalte, class_basename($anderes), )); } } } private static function vergleichswert(mixed $wert): ?string { if ($wert instanceof BackedEnum) { return (string) $wert->value; } return $wert === null ? null : (string) $wert; } }