Herencia

Hola buenos dias…

Soy nuevo en yii2 y tengo una consulta que hacerles.

Disculpen si es muy simple mi problema.

Quisiera saber como implementar herencia.

Por ejemplo si tengo 3 tablas persona(dni, nombre,apellido) pofesor(dni,legajo) alumno(dni,curso)

Como hago para que se cumpla esa herencia? Genere codigo automáticamente código con gii pero me crea 3 modelos que extienden de ActiveRecord. Yo creo que lo logico seria que profesor y Alumno heredasen de persona.

Hola lucho creo que gii por defecto tiene una opción cuando creas el modelo en el que le indicas que clase es la clase padre, donde la clase por defecto es ActiveRecord tu puedes cambiarlo a cualquier clase. Luego debes acomodar las operacioens de guardado, pues cada clase sobrescribe el metodo getTable(), por lo que alumno y profesor intentarian guardar todos los datos en sus respectivas tablas.

Bushi agradezco mucho tu respuesta pero no logro encontrar la opción de gii que me comentaste.

También no logro entender como por ejemplo si quiero crear un profesor y creo un formulario para que el usuario ingrese los datos como hago para que el modelo valide la información tanto de persona como la info particular del profesor que en este caso es el legajo y después guardarlo.

si me podes ayudar te agradecería

.





--baseClass: string (defaults to 'yii\db\ActiveRecord')

  This is the base class of the new ActiveRecord class. It should be a fully

  qualified namespaced class name.

si heredas, para la validación debes hacer un merge de cuando implementes las reglas de validación en el método rules()

algo así:


 public function rules()

    {

        return array_merge(parent::rules(),[

            // name, email, subject and body are required

            [['name', 'email', 'subject', 'body'], 'required'],

            // email has to be a valid email address

            ['email', 'email'],

            // verifyCode needs to be entered correctly

            ['verifyCode', 'captcha'],

        ]);

    }



Ahora estoy confundido en la operación de guardado cuando pueda intentaré hacerlo a ver. porque se puede hacer con dos modelos y hacer luego el enlace. pero hacerlo así no es elegante ni eficiente, debería ser como tu lo mencionas, con un solo modelo que almacene la información en ambas tablas.

Genial muchas gracias. voy a seguir investigando para ver como hacer para guardar desde un modelo! Si llegas a dar con la respuesta y no es mucha molestia te pido que me ayudes!

Tengo otro Problema en mi clase Profesor.




class Profesor extends \app\models\Persona

{

    /**

     * @inheritdoc

     */

    public static function tableName()

    {

        return 'profesor';

    }


    /**

     * @inheritdoc

     */

    public function rules()

    {

        return array_merge(parent::rules(),[

            [['dni'], 'required'],

            [['dni'], 'integer'],

            [['Legajo'], 'string', 'max' => 30]

        ]);

    }

}



cuando uso la función tableName es como que solo tengo los atributos de la tabla Profesor, pero no me esta heredando los atributos de persona y por lo tanto no los puedo usar en el formulario por eje.

discúlpame si soy muy pesado pero no estoy encontrando documentacion respecto a esto.

mmm por eso estoy confundido, cuando uno usa la Clase ActiveRecords esta carga los atributos dinamicamente dependiendo de las columnas que se encuentren en base de datos. por eso aunque te está heredando de la clase persona carga los atributos de la tabla profesor únicamente :confused: hay que revisar el código de la clase ActiveRecord para ver si tiene alguna manera de hacerlo.