eloquent - モデルフェッチが完了したときのコールバック
質問
私は、「PageCustomField」(カスタムフィールドのWordPress概念のように)を持つモデル「ページ」を持っています。
このカスタムフィールドモデルには、キーと値の2つのフィールドがあります。私が何をしたいのかは、page
が親ページモデルであるTwigテンプレートで次のようなことをすることができます。フィールドリレーション出力はPageCustomFieldモデルのcustom
フィールドになります。
{{ page.custom.email }}
.
私はページモデルに以下を追加することによってこれを達成しました:
public $custom = array();
public function extractCustomFields()
{
foreach ($this->customFields as $customField) {
$this->custom[$customField->key] = $customField->value;
}
return $this;
}
.
は次のように呼び出されます:
$page = Page::where('slug', 'home')->firstOrFail()->extractCustomFields();
.
静的BOOTメソッドなど、これを自動的に実行したコールバックを持つことになるでしょう。
のようなもの...public static function boot()
{
parent::boot();
// Extract PageCustomField relations into 'custom' array
static::fetched(function($model) {
$model->extractCustomFields();
});
}
.
Illuminate \ Database \ Eloquent \ Modelメソッドを通して、これを達成するだろうコールバックを見ることができませんでしたが、それはできますか? email
メソッドを上書きすることはできませんでしたが、そうではありませんでした。
解決
アクセサーを使用できると思います。。
protected $customFields = [
'email' = 'foo@bar.com'
];
public function getCustomAttribute() {
return $this->customFields; // array
//return (object)$this->customFields; // object
}
.
それを呼び出す:
$user = MyClass::find(1);
echo $user->custom['email']; // array
//echo $user->custom->email; // object
. 所属していません StackOverflow