Question

Is possibile to use inheritance in laravel model? I explain:

is possible to exend a model, which extends eloquent class?

class A extends Eloquent
{
}

class B extends A
{
}

A e B are also 2 different tables and B has A_id as foreignkey and other fields. How could be the constructor of class B? is it a ragionable solution or better use hasOne relationship?

no every A object are also B object. Es. user and teacher

Thank you

Was it helpful?

Solution

I’m having difficulty understanding your supplementary details, but in answer to the actual question: yes, it is possible to extend Eloquent models.

<?php
class User extends \Eloquent {

    protected $table = 'users';

}

class Student extends User {

    protected $table = 'students';

}

Be warned though, that any methods (such as relations, scopes etc) will propagate to the extending class. If this is not desired, then create a base class that has the minimum of what you need, and then sub-class it with your specific types, i.e. Student, Administrator etc.

Another approach is to use interfaces. So if you know models need the same attributes but will say, have different relations; then you can create an interface to add those constraints:

<?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');
    }

}

OTHER TIPS

I resolve with

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

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

but in the main function:

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

where the method() is a method of A class, the system gives to me an mysql error:

select * fromCwhereC.B_id= 1

the error is B_id. It should be A_id cause the method shold be applied from subobject of the class, not from the class

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top