Laravel 9 Eloquent-Modell – Spaltennamen im Modell beibehalten
P粉309989673
P粉309989673 2023-09-03 14:36:02
0
1
468

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?

P粉309989673
P粉309989673

Antworte allen (1)
P粉034571623

简单的解决方法是使用 ArrayObject 访问器方法:

$this['attributes'] = ['x' => 'y']; $stuff = $this['attributes'];

注意:仍然需要定义“attributes”转换才能以数组形式访问底层 jsonb 字段:

protected $casts = [ 'attributes' => AsArrayObject::class ];
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!