Ich habe eine Postgres-Datenbank mit einer Tabelle, die eine Spalte namens „Attribute“ enthält.
Die Attributspalte ist vom JSONB-Typ, daher verwende ich die Eloquent-Konvertierung:
protected $casts = [ 'attributes' => AsArrayObject::class, ];
Dies scheint Probleme zu verursachen, da die „Eigenschaft“ bereits eine Eloquent-Modelleigenschaft ist und es offenbar keine Möglichkeit gibt, Spaltennamen mit Aliasnamen zu versehen.
Also diese Zeile:
$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'Hallo Wort!';
Scheint auf ein internes Eloquent-Modellattribut zuzugreifen – und nicht auf das Feld „attributes“ in meiner Datenbanktabelle, was zu folgendem Fehler führt:
SQLSTATE[42703]: Undefinierte Spalte: 7 FEHLER: Spalte „a_property_of_the_attributes_jsonb_field“ der Beziehung „mytable“ existiert nicht ZEILE 1: update „mytable“ set „a_property_of_the_attributes_jsonb_field“ = $1 where „mypk“ = ...
Ich kann die Spalte nicht umbenennen, da andere Nicht-PHP-Projekte die Datenbank verwenden.
Wie kann ich als ArrayObject auf das Eigenschaftsfeld in meinem Modell zugreifen?
简单的解决方法是使用 ArrayObject 访问器方法:
注意:仍然需要定义“attributes”转换才能以数组形式访问底层 jsonb 字段: