Dudas básicas

Hola a todos!

De acuerdo a la modalidad del chat, voy al grano:

Necesito ayuda en:

  1. Hacer única una combinación de variables, no por separado. Ejemplo: tipo y nombre de un usuario. Con array(‘tipo, nombre’, ‘unique’) no funciona.

  2. Con CJUIDatePicker no puedo ver fechas anteriores a la de hoy ni años anteriores a 2006 :S, estoy usando el código que subieron a un pdf:


<div class="row">

<?php echo $form->labelEx($model,'fecha'); ?>

<?php

if ($model->fecha!='') {

$model->fecha=date('d-m-Y',strtotime($model->fecha));

}

$this->widget('zii.widgets.jui.CJuiDatePicker', array(

'model'=>$model,

'attribute'=>'fecha',

'value'=>$model->fecha,

'language' => 'es',

'htmlOptions' => array('readonly'=>"readonly"),

'options'=>array(

'autoSize'=>true,

'defaultDate'=>$model->fecha,

'dateFormat'=>'dd-mm-yy',

'buttonImage'=>Yii::app()->baseUrl.'/images/calendar.png',

'buttonImageOnly'=>true,

'buttonText'=>'Fecha',

'selectOtherMonths'=>true,

'showAnim'=>'slide',

'showButtonPanel'=>true,

'showOn'=>'button',

'showOtherMonths'=>true,

'changeMonth' => 'true',

'changeYear' => 'true',

'minDate'=>'date("Y-m-d")', //fecha minima

'maxDate'=> "+20Y", //fecha maxima

),

)); ?>

<?php echo $form->error($model,'fecha'); ?>

</div>

Además me guarda datos NULL en la DB.

  1. Tengo una tabla Préstamo y otra Usuario, en Préstamo una FK con el id del usuario. Si existe un préstamo activo, ese usuario es moroso. Lo que quiero es mostrar un botón "Ver solo Morosos" en el index del modelo de Usuario.

A esto lo pensé en hacer un indexMoroso.php y un _viewMoroso.php solo con los datos de los usuarios que adeudan, pero no se como hacerlo ya que debería recorrer todos los préstamos a fin de encontrar préstamos activos y por lo tanto usuarios morosos para poder listarlos con CListView.

En este caso, sería conveniente que en la tabla Usuario de la DB se coloque un atributo nuevo "estado" o "moroso" boolean?

Desde ya muchas gracias!

Segun por preguntas:

  1. No entendi

  2. Averiguaste para que sirve esta propiedad?

‘minDate’=>‘date(“Y-m-d”)’, //fecha minima

Y si no se guarda es que el atributo no esta definido o se esta perdiendo en algun lado, o el campo no coincide con el tipo de dato que le estas enviando.

  1. Me parece que en tu caso lo mas eficiente es usar un 0=inactivo 1=activo para cada cliente segun el estado.

Algo como esto.

Esa propiedad no cambia en nada el resultado que obtengo :S

Replanteo la duda:

Tengo una tabla Prestamo y otra Usuario. Un préstamo puede tener 1,1 usuario. Un usuario puede tener 0…n préstamos. Lo que quiero es NO poner un boolean ‘estado’ en la tabla Usuario. Necesito DESDE el index del modelo Usuario ver (a través de un link/botón) SOLO los usuarios morosos, esto es: los usuarios que están asociados a un préstamo con ‘estado’=1.

Pensé en algo como esto, sacado de la guía definitiva:


$users=User::model()->with(array(

    'posts'=>array(

        // we don't want to select posts

        'select'=>false,

        // but want to get only users with published posts

        'joinType'=>'INNER JOIN',

        'condition'=>'posts.published=1',

    ),

))->findAll();

pero no se como implementarlo en mi caso. Tengo una relación BELONGS_TO en Préstamo (foreign key relacionada con el id del usuario).

A veri si entiendo las preguntas…

  1. ¿Quieres declarar una combinación de campos como UNIQUE? Algo que en SQL declara como:

CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

???

  1. No se me ocurre una alternativa al ‘minDate’, excepto quizá manejar a mano la declaración, sin usar el widget de Yii.

  2. Quedo un poco perdido, ¿Porqué la asociación de los usuarios es ‘estado=1’ ? Bueno, igual creoq ue te capto la idea.

Imagino que tienes n cantidad de usuarios registrados y no todos tienen un préstamo asociado (¿eso es ‘estado=1’?).

Yo lo haría un poco a la vieja usanza, pero con DBCommand:




$usuariosMorosos = Yii::app()->db->createCommand()

  ->select('u.*')

  ->from('usuarios u')

  ->join('prestamos p', array('p.prestamo_id' => 'u.prestamo_id'))

  ...

  ->queryAll();



Bueno, algo así, lo escribí un poco a la carrera y sin revisar mi código para ver que no tenga errores (seguro que tiene XD).

Saludos.

Exacto, que la combinación sea única, no cada uno por separado.

Para hacerlo más fácil:

Supongamos que tenemos un modelo Empresa y un modelo Localidad. Lo que quiero es desde, por ejemplo, index.php (home) poner una lista de links que me muestren solo las Empresas de cierta Localidad.

Ejemplo:


<?php

$localidades=Localidad::model()->findAll();

foreach($localidades as $localidad)

	echo CHtml::link($localidad->nombre, array('empresa/index','idLocalidad'=>$localidad->id)).'</br>';

?>

Pero necesito saber como puedo usar otra acción que no sea esa ‘index’ y que no me de error 403.

Espero sus respuestas. Gracias!

El tercer problema está solucionado. Me extraña que nadie me haya marcado algo tan básico. Esto es parte del tutorial del blog: http://www.yiiframework.com/doc/blog/1.1/en/post.display#customizing-x-10x-operation.

Espero que a alguien le sirva.

La duda uno ya no importa, lo haré como dijo yyeshua con SQL.