سؤال

لدي نموذج 'صفحة' والتي لديها واحد لكثير علاقة '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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top