Yii Framework Forum: Búsquedas Relacionales - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Búsquedas Relacionales Rate Topic: -----

#1 User is offline   currofornes 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 29-August 12

Posted 30 October 2012 - 09:02 AM

Buenas a todos,

Soy un poco nuevo en Yii, y cuando quiero realizar algo un poco más complicado se me escapa de las manos.

Veréis, el problema es el siguiente:

Tengo una tabla en la base de datos para modelar Documentos. Su clave primera es "id".
Tengo otra tabla en la base de datos para modelar Clases. Su clave primaria es "id".
Tengo otra tabla llamada RelDocumentoClase, donde voy añadiendo registros para anotar que un número de ejemplares (num_ejemplares) de un determinado Documento (id_documento) pertenece a una Clase (id_clase).

Las relaciones que tengo en el modelo RelDocumentoClase son:
'clase' => array(self::BELONGS_TO, 'Clase', 'id_clase'),
'documento' => array(self::BELONGS_TO, 'Documento', 'id_documento'),


Esto funciona bien. Si quiero ver el listado completo de Documentos que hay en una clase concreta, utilizo esto:

$criteria = new CDbCriteria();
$criteria->select = 'id, id_clase, id_documento, sum(num_ejemplares) AS total';
$criteria->condition = 'id_clase=:id AND estado=:estado';
$criteria->group = 'id_documento';
$criteria->params = array(':id'=>$this->id, ':estado'=>RelDocumentoClase::ESTADO_PENDIENTE);

$dataProvider=new CActiveDataProvider('RelDocumentoClase', array(
      	'criteria'=>$criteria,
      	'pagination'=>false,
)); 



Mi problema viene cuando no quiero obtener todos los documentos que hay en una clase, sino solo los que en el título del documento (Documento.titulo) aparezca una palabra, es decir, realizar una búsqueda.

Lo estoy intentando hacer de esta forma:

$criteria = new CDbCriteria();
$criteria->select = 't.id, t.id_clase, t.id_documento, sum(t.num_ejemplares) AS total';
$criteria->condition = 't.id_clase=:id AND t.estado=:estado';
$criteria->group = 't.id_documento';
$criteria->params = array(':id'=>$id, ':estado'=>RelDocumentoClase::ESTADO_PENDIENTE);

$criteria->with = array(
   'documento', 
);
			
$criteria->together = true;

$criteria ->addCondition("documento.titulo LIKE '%'");
		
$criteria->params = array(':filterProperties' => $_POST['Clase']['filterProperties']);

$docDataProvider=new CActiveDataProvider('RelDocumentoClase', array(
	'criteria'=>$criteria,
       	'pagination'=>false,
)); 



La variable :filterProperties contiene el texto que quiero buscar.
He comprobado que tanto el $id de la clase como el texto que quiero buscar se están pasando bien, pero esto siempre me devuelve 0 resultados, aún sabiendo que debería devolver alguno.

Alguién sería tan amable de indicarme qué estoy haciendo mal?

Muchas gracias.
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 30 October 2012 - 09:10 AM

Hay algo que me llama la atención:
El atributo $criteria->params está siendo sobreescrito, así que sólo se usará la asignación ulterior.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 30 October 2012 - 09:14 AM

Pregunta:
Veo que las diferentes condiciones incluyen los parámetros "id" y "estado", en qué condición se está incluyendo el parámetro ":filterProperties"?

Saludos.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#4 User is offline   currofornes 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 29-August 12

Posted 30 October 2012 - 04:09 PM

Genial! El problema era lo de params... Yo creía que se iban acumulando.
Con respecto a lo de filterProperties, he tenido una equivocación al escribirlo, la condición era:

$criteria ->addCondition("documento.titulo LIKE '%' || :filterProperties || '%');


Muchas gracias, de verdad.

Un saludo.
0

#5 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 01 November 2012 - 06:14 AM

Con gusto, por acá estaremos con la comunidad para apoyarnos :)
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users