سؤال

هل من الممكن استخدام الميراث في نموذج لارافيل؟أشرح:

هل من الممكن تمديد النموذج الذي يمتد فئة بليغة؟

class A extends Eloquent
{
}

class B extends A
{
}

A e B أيضًا عبارة عن جدولين مختلفين وB لديه A_id كمفتاح أجنبي وحقول أخرى.كيف يمكن أن يكون منشئ الفئة ب؟هل هو حل معقول أم أنه من الأفضل استخدام علاقة واحدة؟

لا، كل كائن A هو أيضًا كائن B.وفاق.المستخدم والمعلم

شكرًا لك

هل كانت مفيدة؟

المحلول

أواجه صعوبة في فهم تفاصيلك التكميلية، ولكن إجابة على السؤال الفعلي:نعم، من الممكن التوسع في نماذج Eloquent.

<?php
class User extends \Eloquent {

    protected $table = 'users';

}

class Student extends User {

    protected $table = 'students';

}

لكن كن حذرًا من أن أي طرق (مثل العلاقات والنطاقات وما إلى ذلك) سوف نشر إلى الطبقة الموسعة.إذا لم يكن ذلك مرغوبًا، فقم بإنشاء فئة أساسية تحتوي على الحد الأدنى مما تحتاجه، ثم قم بتصنيفها فرعيًا بأنواعك المحددة، على سبيل المثال. Student, Administrator إلخ.

هناك طريقة أخرى تتمثل في استخدام الواجهات.لذلك إذا كنت يعرف تحتاج النماذج إلى نفس السمات ولكن لها علاقات مختلفة؛ثم يمكنك إنشاء واجهة لإضافة تلك القيود:

<?php
interface UserInterface {

    public function getName();

}

class User extends \Eloquent implements UserInterface {

    protected $table = 'users';

    public function getName()
    {
        return $this->name;
    }

}

class Student extends \Eloquent implements UserInterface {

    protected $table = 'students';

    public function getName()
    {
        return $this->name;
    }

    public function courses()
    {
        return $this->belongsToMany('Course');
    }

    public function grades()
    {
        return $this->hasMany('Grade');
    }

}

نصائح أخرى

أنا أحل مع

class A extends Eloquent 
{
   protected $table  = 'a';
}

class B extends A
{
   protected $table  = 'b';
   protected $primaryKey = 'a_id';
}

ولكن في الوظيفة الرئيسية:

$f = B::find(1);
$f->method();

حيث الطريقة () هي طريقة للفصل ، يعطي لي النظام خطأ MySQL:

select * fromجwhereج.مُنَاقَصَة= 1

الخطأ هو B_id.يجب أن يكون A_id لأنه يجب تطبيق الطريقة من كائن فرعي للفئة، وليس من الفئة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top