بليغ - الاستدعاء عند نموذج جلب كاملة
سؤال
لدي نموذج 'صفحة' والتي لديها واحد لكثير علاقة 'PageCustomField' (مثل وورد مفهوم حقل مخصص).
هذا حقل مخصص نموذج اثنين من المجالات الرئيسية والقيمة.ما أود القيام به هو أن تكون قادرة على القيام بشيء ما مثل التالية في غصين القالب ، حيث page
هو الصفحة الرئيسية النموذج ، custom
هو مجموعة من الحقول المخصصة ، email
هو الرئيسية إلى استعلام حقل مخصص العلاقات.الناتج سيكون value
مجال PageCustomField نموذج.
{{ 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();
ماذا كنت تفضل أن يكون الاستدعاء الذي فعل ذلك تلقائيا ، ومع ذلك ، كما هو الحال في ثابت التمهيد الأسلوب.شيء من هذا القبيل...
public static function boot()
{
parent::boot();
// Extract PageCustomField relations into 'custom' array
static::fetched(function($model) {
$model->extractCustomFields();
});
}
يبحث من خلال إلقاء الضوء\Database\بليغ\نموذج الطرق ، لم أستطع رؤية الاستدعاء الذي من شأنه تحقيق ذلك ، ولكن يمكن أن يتم ذلك ؟ لا يمكن تجاوز firstOrFail()
الطريقة ولكن بدلا من ذلك سوف لا.
المحلول
أعتقد أنك يمكن أن تستخدم accessor على هذه الحالة.
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