Hola Comunidad
Tengo la siguientes tablas
Tb_entidades_personas
ID_ENTI_PER (PK)
iD_Persona (FK)
…
Tb_Personas
id_persona (PK)
nombre
apellido1
apellido2
…
tb_personas_servicios
id_servicio (PK)
ID_enti_per (FK)
…
Desde el formulario de alta en un modelo que guarda la relación de las personas con unos servicios, estoy intentando crear un autocomplete para que busque por el nombre y apellidos de la persona (tb_personas) y tome el id de la tabla (tb_entidades_personas) para que este sea guardado en el formulario.
dentro del controller tengo hecha esta función con en base a un ejemplo visto en el foro.
public function actionBuscaPersonas()
{
$term = Yii::app()->getRequest()->getParam('term',false);
$users = Yii::app()->db->createCommand()
->select('ID_ENTI_PER')
->from ('tb_entidades_personas ,tb_personas')
->join ('tb_personas','tb_entidades_personas.id_persona = tb_personas.id_persona')
->where ('LOWER(NOMBRE) like LOWER(:term) or LOWER(APELLIDO_1) like LOWER(:term) or (APELLIDO_2) like LOWER(:term)',array(':term'=> '%'.$_GET['term'].'%'))
->queryAll();
$arr=array();
foreach ($users as $user)
{
$arr[]=array(
'label'=>($model->NOMBRE.' '.$model->APELLIDO_1.' '.$model->APELLIDO_2.''), // label for dropdown list
'value'=>($model->NOMBRE.' '.$model->APELLIDO_1.' '.$model->APELLIDO_2.''), // value for input field
'id'=>$model->ID_ENTI_PER, // return value from autocomplete
);
}
echo CJSON::encode($arr);
Yii::app()->end();
}
he comprobado la query por fuera mediante un gestor de BD y muestra los resultados correctos.
he dado los correspondientes permisos dentro de las rules.
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view','BuscaPersonas'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update','BuscaPersonas'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete','BuscaPersonas'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
en el model he creado las variables publicas para el autocomplete.
public $BuscaPersonas;
y además
public function afterFind()
{
$this->BuscaPersonas = $this->ID_ENTI_PER;
}
y finalmente en el form para el campo
<div class="row">
<?php echo $form->labelEx($model,'ID_ENTI_PER'); ?>
<?php echo $form->HiddenField($model, 'ID_ENTI_PER');
$this->widget('zii.widgets.jui.CJuiAutoComplete',
array(
'model'=>$model,
'attribute'=>'BuscaPersonas',
'source'=>$this->createUrl('tbPersonasServicios/BuscaPersonas'),
'htmlOptions'=>array('placeholder'=>'Persona...','style'=>('height:20px;size:200px;')),
'options'=>
array(
'showAnim'=>'fold',
'size'=>'130',
'minLength'=>'3',
'select'=>"js:function(event, ui) {
$('#".CHtml::activeId($model,'ID_ENTI_PER')."').val(ui.item.id);
}"
),
));
?>
<?php echo $form->error($model,'ID_ENTI_PER');?>
cuando cumplimento el campo para se realice y muestre los resultados no hace nada…
alguna idea de que me he dejado por hacer. se puede hacer de otra forma?