construccion
en el formulario:
<?= $form->field($model, 'id_sector')->dropDownList(ArrayHelper::map(Sectores::find()->orderBy('nombre_sector')->all(), 'id_sector', 'nombre_sector'), ['prompt' => 'Seleccione ', 'id' => 'id-sector','onchange' => 'actualizarEntes(value)']); ?>
</div>
<div class="col-xs-3">
<?php /*$form->field($model, 'id_ente')->widget(Select2::classname(), [
'model' => $model,
'attribute' => 'id_ente',
'data' => ArrayHelper::map(Entes::find()->orderBy('nombre_ente')->asArray()->all(), 'id_ente', 'nombre_ente'),
'language' => 'es',
'maintainOrder' => true,
'showToggleAll'=> false,
'readonly'=>true,
'options' => ['placeholder' => 'Seleccione...', 'multiple' => true,],
'pluginOptions' => [
'maximumSelectionLength'=>35,
'minimumInputLength'=>0,
],
]);*/ ?>
<?= $form->field($model, 'id_ente')->widget(DepDrop::classname(), [
'type' => DepDrop::TYPE_SELECT2,
'data' => [], // Inicialmente vacío
'options' => ['placeholder' => 'Seleccione...', 'multiple' => true],
'pluginOptions' => [
'depends' => ['id-sector'], // ID del campo del que depende
'url' => Url::to(['/entes/listar']), // URL para obtener los datos dependientes
'loadingText' => 'Cargando entes...',
],
]); ?>
</div>
</div>
en el modelo de la tabla que voy a mostrar en el DepDrop:
public static function Lista(){
$s = \yii\helpers\ArrayHelper::map(Entes::find()->orderBy('id_ente')->all(),'id_ente','nombre_ente');
return ($s) ? $s : [];
}
en la action update del controlador:
public function actionUpdate($id)
{
$model = $this->findModel($id);
// Carga los datos de 'indicadores_entes' en el modelo
$model->id_ente = ArrayHelper::map($model->entes, 'id_ente', 'nombre_ente');
if ($model->load(Yii::$app->request->post())) {
// Desvincula todos los 'entes' existentes para evitar duplicados
$model->unlinkAll('entes', true);
// Guarda los nuevos valores seleccionados en la tabla de relación
foreach ($model->id_ente as $enteId) {
$ente = Entes::findOne($enteId);
$model->link('entes', $ente);
}
if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id_indicador]);
}
}
return $this->render('update', [
'model' => $model,
]);
}
en la action create :
public function actionCreate()
{
$model = new Indicadores();
if ($model->load(Yii::$app->request->post())) {
if ($model->save()) {
// Obtén los valores seleccionados del campo 'id_ente'
$entesSeleccionados = Yii::$app->request->post('Indicadores')['id_ente'];
// Guarda los valores seleccionados en la tabla de relación
foreach ($entesSeleccionados as $enteId) {
$ente = Entes::findOne($enteId);
$model->link('entes', $ente);
}
return $this->redirect(['view', 'id' => $model->id_indicador]);
}
}
return $this->render('create', [
'model' => $model,
]);
}