Heim  >  Fragen und Antworten  >  Hauptteil

Laravel 9 Eloquent-Modell – Spaltennamen im Modell beibehalten

<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粉309989673P粉309989673435 Tage vor542

Antworte allen(1)Ich werde antworten

  • P粉034571623

    P粉0345716232023-09-04 12:12:46

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

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

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

    protected $casts = [
        'attributes' => AsArrayObject::class
    ];

    Antwort
    0
  • StornierenAntwort