GOOGLE ADS

Montag, 2. Mai 2022

Laravel Eloquent - Array in Modell konvertieren (mit der Möglichkeit, angehängte Attribute anzupassen)

Ich möchte die Antwort in dieser Frage erreichen.

Außer, dass ich meinem Array auch angehängte Attribute hinzufügen und ändern möchte.

Nehmen wir an, ich habe diese Variable.

//...
$example = new Model([
'id' => 123,
'name' => 'Example'
])
//...

Das Array wird in ein eloquentes Modell „Model" umgewandelt und der Variablen $example zugewiesen. So weit, ist es gut.

Das Problem tritt auf, wenn ich angehängte Attribute verwenden möchte.

//...
$example = new Model([
'id' => 123,
'name' => 'Example'
'append' => 'Example Append'
])
//...

Wenn ich dies tue, versuche ich, die Unterkunft über anzurufen

$example->append

führt nicht zu 'Example Append'. Stattdessen wird die Attributlogik im Modell betrachtet und basierend darauf zurückgegeben.

// App/Models/Model.php
//...
public function getAppendAttribute() {
return "Nothing";
}
//...

In diesem Fall wird "Nothing" anstelle von "Example Append" zurückgegeben. Ich kann es ändern, indem ich mit der Logik in der Attributfunktion arbeite und sie über Tabelleneigenschaften anpasse, aber das wird etwas kompliziert, wenn die Logik Dinge wie Beziehungen verwendet.

// App/Models/Model.php
//...
public function getAppendAttribute() {
return $this->relations()->count();
}
//...

Gibt es eine Möglichkeit, ein Modell aus einem Array zu erstellen und seine Anhänge direkt zu ändern?

UPDATE: Mittwoch, 13. April, 11:40 Uhr

Ich habe herausgefunden, dass ich eine neue Eigenschaft hinzufügen kann über:

$example->append = "Example Append";

Das Problem, auf das ich immer noch stoße, ist, dass ich es mit der Pfeilsyntax aufrufe

$example->append

wird immer noch dazu führen, dass die Attributfunktionslogik und nicht das benutzerdefinierte Anhängen zurückgegeben wird.

Wenn ich also dd($example) verwende, wird es in den „#attributes" aufgelistet, aber ich kann es nicht über einen Eigenschaftsaufruf erreichen.


Lösung des Problems

Sie können der Modellklasse eine Eigenschaft wie folgt hinzufügen:

class MyModel extends Model {
public $append = null;
//...
//...
//...
}

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...