YII2 Dropdown con Foreings Keys en Formularios

Buenas,estoy intentando crear unos dropdown para mostrar el campo nombre de unas foreigns keys

Los droopdown son:

6244

formularioyii2.jpg

Como ven, la idea era mostrar el campo nombre en vez de la FK

A la hora de darle a crear no se me guarda el registro, y según el debugger de yii2 los datos que se mandan por $POST parecen estar bien, así que no tengo

6245

$post_form.jpg

La tabla que estoy usando es alumnos y las tablas con clave foraneas son Nacionalidad,Poblacion,Provincia,Municipio

Adjunto el código, a ver si alguno sabe decirme cual es el problema.

En el modelo he usado una función para rellenar los droopdown, no sé si es la manera más correcta pero es la única que se me ocurrió.

Saludos.

Model Alumnos


<?php


namespace app\models;


use Yii;

use yii\helpers\ArrayHelper;

/**

 * This is the model class for table "alumnos".

 *

 * @property integer $id

 * @property string $nombre

 * @property string $apellido1

 * @property string $apellido2

 * @property string $fecha_nac

 * @property string $dni

 * @property string $foto

 * @property string $tlf

 * @property string $mvl

 * @property string $email

 * @property string $contacto_emergencias

 * @property string $direccion

 * @property integer $municipio_id

 * @property integer $poblacion_id

 * @property integer $provincia_id

 * @property integer $nacionalidad_id

 * @property string $alergias

 *

 * @property Nacionalidades $nacionalidad

 * @property Provincias $provincia

 * @property Municipios $municipio

 * @property Poblaciones $poblacion

 */

class Alumnos extends \yii\db\ActiveRecord

{

    /**

     * @inheritdoc

     */

    public static function tableName()

    {

        return 'alumnos';

    }


    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            [['nombre', 'apellido1', 'municipio_id', 'provincia_id', 'nacionalidad_id', 'alergias'], 'required'],

            [['fecha_nac'], 'safe'],

            [['municipio_id', 'poblacion_id', 'provincia_id', 'nacionalidad_id'], 'integer'],

            [['nombre'], 'string', 'max' => 80],

            [['apellido1', 'apellido2', 'foto'], 'string', 'max' => 150],

            [['dni', 'tlf', 'mvl', 'contacto_emergencias'], 'string', 'max' => 9],

            [['email'], 'string', 'max' => 100],

            [['direccion'], 'string', 'max' => 200],

            [['alergias'], 'string', 'max' => 300]

        ];

    }


    /**

     * @inheritdoc

     */

    public function attributeLabels()

    {

        return [

            'id' => 'ID',

            'nombre' => 'Nombre',

            'apellido1' => 'Apellido1',

            'apellido2' => 'Apellido2',

            'fecha_nac' => 'Fecha Nac',

            'dni' => 'Dni',

            'foto' => 'Foto',

            'tlf' => 'Tlf',

            'mvl' => 'Mvl',

            'email' => 'Email',

            'contacto_emergencias' => 'Contacto Emergencias',

            'direccion' => 'Direccion',

            'municipio_id' => 'Municipio ID',

            'poblacion_id' => 'Poblacion ID',

            'provincia_id' => 'Provincia ID',

            'nacionalidad_id' => 'Nacionalidad ID',

            'alergias' => 'Alergias',

        ];

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getNacionalidad()

    {

        return $this->hasOne(Nacionalidades::className(), ['id' => 'nacionalidad_id']);

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getProvincia()

    {

        return $this->hasOne(Provincias::className(), ['id' => 'provincia_id']);

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getMunicipio()

    {

        return $this->hasOne(Municipios::className(), ['id' => 'municipio_id']);

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getPoblacion()

    {

        return $this->hasOne(Poblaciones::className(), ['id' => 'poblacion_id']);

    }

	

	//RELLENAR DROOPDOWNS

	public function getcomboMunicipios() { 

        $models = Municipios::find()->asArray()->all();

        return ArrayHelper::map($models, 'id', 'nombre');

    }

	

	public function getcomboPoblaciones() { 

        $models = Poblaciones::find()->asArray()->all();

        return ArrayHelper::map($models, 'id', 'nombre');

    }

	

	public function getcomboProvincias() { 

        $models = Provincias::find()->asArray()->all();

        return ArrayHelper::map($models, 'id', 'nombre');

    }

	

	public function getcomboNacionalidades() { 

        $models = Nacionalidades::find()->asArray()->all();

        return ArrayHelper::map($models, 'id', 'nombre');

    }

}



_form de alumnos


<?php


use yii\helpers\Html;

use yii\widgets\ActiveForm;


/* @var $this yii\web\View */

/* @var $model app\models\Alumnos */

/* @var $form yii\widgets\ActiveForm */

?>


<div class="alumnos-form">


    <?php $form = ActiveForm::begin(); ?>


    <?= $form->field($model, 'nombre')->textInput(['maxlength' => 80]) ?>


    <?= $form->field($model, 'apellido1')->textInput(['maxlength' => 150]) ?>


    <?= $form->field($model, 'apellido2')->textInput(['maxlength' => 150]) ?>


    <?= $form->field($model, 'fecha_nac')->textInput() ?>


    <?= $form->field($model, 'dni')->textInput(['maxlength' => 9]) ?>


    <?= $form->field($model, 'foto')->textInput(['maxlength' => 150]) ?>


    <?= $form->field($model, 'tlf')->textInput(['maxlength' => 9]) ?>


    <?= $form->field($model, 'mvl')->textInput(['maxlength' => 9]) ?>


    <?= $form->field($model, 'email')->textInput(['maxlength' => 100]) ?>


    <?= $form->field($model, 'contacto_emergencias')->textInput(['maxlength' => 9]) ?>


    <?= $form->field($model, 'direccion')->textInput(['maxlength' => 200]) ?>

	

	<?=$form->field($model, 'municipio')->dropDownList($model->comboMunicipios)?>

	

	<?=$form->field($model, 'poblacion')->dropDownList($model->comboPoblaciones)?>


    <?=$form->field($model, 'provincia')->dropDownList($model->comboProvincias)?>

	

	<?=$form->field($model, 'nacionalidad')->dropDownList($model->comboNacionalidades)?>


    <?= $form->field($model, 'alergias')->textInput(['maxlength' => 300]) ?>


    <div class="form-group">

        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>

    </div>


    <?php ActiveForm::end(); ?>


</div>



usé print_r( $model->getErrors() );

y muestra que el modelo no obtiene las fk del droopdown.

Array ( [municipio_id] => Array ( [0] => Municipio ID cannot be blank. ) [provincia_id] => Array ( [0] => Provincia ID cannot be blank. ) [nacionalidad_id] => Array ( [0] => Nacionalidad ID cannot be blank. ) )

SOLUCIÓN:

Era un fallo tonto,escribí mal los campos en la vista

<?=$form->field($model, ‘poblacion’) era <?=$form->field($model, ‘poblacion_id’) y lo demás con lo mismo.

mira yo uso Select2 de kartik y seria algo asi,entidad_fk es mi llave foranea y en el _form de mi clase que la contiene pongo esto, espero que te sirva




<?= $form->field($model, 'entidad_fk')->widget(Select2::classname(), [

        'data' => ArrayHelper::map(\app\models\Entidad::find()->asArray()->all(), 'id_entidad', 'entidad_nombre'),

        'options' => ['placeholder' => 'Seleccione una entidad','style'=>'width:250px;'],

        'pluginOptions' => [

        'allowClear' => true

        ],

        ]); ?>