2017-05-09 2 views
2

Ich habe ein Attribut des Modells, das geändert werden soll, nachdem es aus der Datenbank geladen wurde.Yii2 Wie kann ein Modellattribut nach der Lademethode geändert werden? (Wie die Afterfind-Methode)

Ich könnte die AfterFind-Methode erweitern, die den Varchar-Wert in ein PHP-Array konvertieren könnte. So funktioniert es finden.

Aber wenn das Modell geladen ist, habe ich keine Ahnung, wie dieses Varchar in das PHP-Array konvertieren.

Ich habe mit Regeln versucht, aber nicht funktioniert:

[['languages'], 'each', 'rule' => ['string']], 

oder dieses

[['languages'], 'safe'], 

So diese funktioniert afterfind:

public function afterFind() 
{ 
    $this->languages = $this->convertToPHPArray($this->languages); 
    parent::afterFind(); 
} 

Durch die Art und Weise habe ich versucht, Erweitern Sie die init oder __constru ctor Methode mit dieser Konversation, aber kein Erfolg, nach laden Methode das Sprachen-Attribut ist immer noch eine Zeichenfolge anstelle eines PHP-Array.

+0

, warum es kein 'afterLoad' Ereignis [yii2/issues/4615] (https://github.com/yiisoft/yii2/issues/4615), kann das Lesen des ganzen Threads eine Idee geben – Alex

Antwort

1

Wenn ich Ihre Frage verstanden, denke ich, dass Sie eine Eigenschaft im Modell verwenden:

public class Model { 

     public function getLanguagesArray() 
    { 
      return $this->convertToPHPArray($this->languages); 

    } 

} 

Dann verwenden Sie es:

$arr = $model->languagesArray; 
Verwandte Themen