Laravel 9 Eloquent-Modell – Spaltennamen im Modell beibehalten
P粉309989673
P粉309989673 2023-09-03 14:36:02
0
1
570
<p>Ich habe eine Postgres-Datenbank mit einer Tabelle, die eine Spalte namens „Attribute“ enthält. </p> <p>Die Attributspalte ist vom JSONB-Typ, daher verwende ich die Eloquent-Konvertierung: </p> <pre class="lang-php Prettyprint-override"><code>protected $casts = [ 'attributes' => AsArrayObject::class, ]; </code></pre> <p>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. </p> <p>Also diese Zeile: </p> <pre class="lang-php Prettyprint-override"><code>$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'Hallo Wort!'; </code></pre> <p>Scheint auf ein internes Eloquent-Modellattribut zuzugreifen – und nicht auf das Feld „attributes“ in meiner Datenbanktabelle, was zu folgendem Fehler führt: </p> <pre class="brush:php;toolbar:false;">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“ = ...</pre> <p>Ich kann die Spalte nicht umbenennen, da andere Nicht-PHP-Projekte die Datenbank verwenden. </p> <p>Wie kann ich als ArrayObject auf das Eigenschaftsfeld in meinem Modell zugreifen? </p>
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