Laravel 9 Eloquent-Modell – Spaltennamen im Modell beibehalten
P粉309989673
2023-09-03 14:36:02
<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>
简单的解决方法是使用 ArrayObject 访问器方法:
注意:仍然需要定义“attributes”转换才能以数组形式访问底层 jsonb 字段: