Frage

Ich habe eine Modellseite mit einer Eins-zu-Viele-Beziehung 'PageCustomField' (wie das WordPress-Konzept eines benutzerdefinierten Felds).

Dieses benutzerdefinierte Feldmodell enthält zwei Felder, Schlüssel und Wert.Was ich tun möchte, ist in der Lage zu sein, in einer Zweigvorlage so etwas wie das Folgende zu tun, wobei page ist das übergeordnete Seitenmodell, custom ist die Sammlung von benutzerdefinierten Feldern und email ist der Schlüssel um benutzerdefinierte Feldbeziehungen abzufragen.Die Ausgabe wäre die value feld des PageCustomField-Modells.

{{ page.custom.email }}

Ich habe dies erreicht, indem ich dem Seitenmodell Folgendes hinzugefügt habe:

public $custom = array();

public function extractCustomFields()
{
     foreach ($this->customFields as $customField) {
        $this->custom[$customField->key] = $customField->value;
     }

     return $this;
}

Wie folgt aufgerufen:

$page = Page::where('slug', 'home')->firstOrFail()->extractCustomFields();

Was ich bevorzugen würde, wäre ein Rückruf, der dies jedoch automatisch ausführt, beispielsweise bei der statischen Startmethode.So etwas wie...

public static function boot()
{
    parent::boot();

    // Extract PageCustomField relations into 'custom' array    
    static::fetched(function($model) {
        $model->extractCustomFields();
    });
}

Beim Durchsuchen der Methoden Illuminate \ Database \ Eloquent \ Model konnte ich keinen Rückruf sehen, der dies erreichen würde, aber kann es getan werden?Ich könnte das überschreiben firstOrFail() methode, würde aber lieber nicht.

War es hilfreich?

Lösung

Ich glaube, du könntest einen gebrauchen Accessor für diesen Fall.

protected $customFields = [
    'email' = 'foo@bar.com'
];

public function getCustomAttribute() {
    return $this->customFields; // array
    //return (object)$this->customFields; // object
}

Nennen Sie es:

$user = MyClass::find(1);

echo $user->custom['email']; // array
//echo $user->custom->email; // object
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top