質問

私は、「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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top