Pregunta

¿Es posible utilizar la herencia en el modelo laravel?Yo explico:

¿Es posible ampliar un modelo que extienda la clase elocuente?

class A extends Eloquent
{
}

class B extends A
{
}

A y B también son 2 tablas diferentes y B tiene A_id como clave externa y otros campos.¿Cómo podría ser el constructor de la clase B?¿Es una solución racional o es mejor utilizar la relación hasOne?

no, todos los objetos A también son objetos B.Es.usuario y profesor

Gracias

¿Fue útil?

Solución

Tengo dificultades para entender sus detalles complementarios, pero en respuesta a la pregunta real:sí, es posible ampliar los modelos Eloquent.

<?php
class User extends \Eloquent {

    protected $table = 'users';

}

class Student extends User {

    protected $table = 'students';

}

Sin embargo, tenga en cuenta que cualquier método (como relaciones, ámbitos, etc.) voluntad propagarse a la clase extendida.Si esto no es lo que desea, cree una clase base que tenga el mínimo de lo que necesita y luego subclasela con sus tipos específicos, es decir. Student, Administrator etc.

Otro enfoque es utilizar interfaces.Así que si usted saber los modelos necesitan los mismos atributos pero, dirán, tienen relaciones diferentes;luego puedes crear una interfaz para agregar esas restricciones:

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

}

Otros consejos

i resolviendo con

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

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

pero en la función principal:

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

donde el método () es un método de una clase, El sistema me da un error MySQL:

select * fromcwherec.b_id= 1

El error es b_id.Debe ser A_ID porque el método se debe aplicar de Subobjetos de la clase, no de la clase

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top