Buenas,estoy intentando crear unos dropdown para mostrar el campo nombre de unas foreigns keys
Los droopdown son:
6244
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
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.