wie man Laravel eloquent -Modelle auf Load benutzerdefinierte Attribute hinzufügt? Betrachten Sie zum Beispiel einen Controller wie diesen:
public function index () { $ sessions = eventSession :: alle (); foreach ($ sissions als $ i => $ session) { $ sissions [$ i]-> verfügbar = $ session-> GetAbleability (); } Return $ Sessions; }
public function index()
{
$sessions = EventSession::all();
foreach ($sessions as $i => $session) {
$sessions[$i]->available = $session->getAvailability();
}
return $sessions;
}
Die Lösung
laravel -Versionen> = 8:
Zum Glück gibt es eine elegante Möglichkeit, dies zu erreichen. geschützte $ table = 'sissions'; Öffentliche Funktionsverfügbarkeit () { Neues Attribut zurückgeben ( Get: fn () => $ this-> calculateAwailability () ); } }
laravel -Versionen
Option 1: appleitet Property
für die Versionen weniger als 8, Sie können die Eigenschaft verwenden, um die Eigenschaften zu kontrollieren. Eloquent { geschützte $ table = 'sissions'; Protected $ appends = Array ('Verfügbarkeit'); Öffentliche Funktion GetAvelabilityAttribute () { $ this-> calculateAvailability () zurückgeben; } }
class EventSession extends Eloquent {
protected $table = 'sessions';
public function availability()
{
return new Attribute(
get: fn () => $this->calculateAvailability()
);
}
}
option 2: überschreiben Sie toArray () method Alternativ können Sie die methode von toArray () überschreiben und das Attribut manuell festlegen:
class book erweitert das eloquent {& {& {&&&]
klassifend eloquent {{& {{& {&&&&]extendends eloquent {{{{{{& subsle {&&&&]
class EventSession extends Eloquent {
protected $table = 'sessions';
protected $appends = array('availability');
public function getAvailabilityAttribute()
{
return $this->calculateAvailability();
}
}
Option 3: Schleifen Sie durch mutierte Attribute
Wenn Sie zahlreiche benutzerdefinierte Zubehör haben, können Sie sie durch sie durch sie itererieren und sie während der Serialisierung anwenden:
class Book extends Eloquent {
protected $table = 'books';
public function toArray()
{
$array = parent::toArray();
$array['upper'] = $this->upper;
return $array;
}
public function getUpperAttribute()
{
return strtoupper($this->title);
}
}
klassistes Buch erweitert das eloquent {{{& {& {&&&] klassistes buchstüchtige {oder geschützt $ table = 'bücher'; Öffentliche Funktion TOARRAY () { $ array = parent :: toArray (); foreach ($ this-> getMutatedAttributes () als $ key) { if (! array_key_exists ($ key, $ array)) { $ array [$ key] = $ this-> {$ key}; } } $ array zurückgeben; } öffentliche Funktion getupperAttribute () { return strtoupper ($ this-> title); } }
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3