Yii Framework Forum: [Résolu] Besoin d'aide avec CDbCriteria - Yii Framework Forum

Jump to content

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

[Résolu] Besoin d'aide avec CDbCriteria Rate Topic: -----

#1 User is offline   Co-k-ine 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 29-March 10

Posted 04 July 2011 - 07:51 AM

Bonjour à tous,

J'ai actuellement un petit problème avec yii, j'aimerais effectuer un filtrage de mes articles. Tout mes articles sont affichés sur index.php?r=films. J'ai voulu rajouter un "filtrage" des articles en faisant un truc du genre index.php?r=films&realisateur=blabla.

Voici mon code dans mon controller :

<?php

public function actionIndex() {
    
$criteria=new CDbCriteria(array(
			
			'order'=>'Date_de_sortie DESC',
			
		));
		if(isset($_GET['realisateur']))
			$criteria->addSearchCondition('Realisateurs',utf8_decode (base64_decode($_GET['realisateur']) ));

		$dataProvider=new CActiveDataProvider('Films', array(
			/*'pagination'=>array(
				'pageSize'=>Yii::app()->params['postsPerPage'],
			),*/
			'criteria'=>$criteria,
		));
                
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}
?>


J'utilise donc :
if(isset($_GET['realisateur']))
			$criteria->addSearchCondition('Realisateurs',utf8_decode (base64_decode($_GET['realisateur']) ));


Pour effectuer mon triage mais cela ne fonctionne pas (aucun résultat trouvé).

J'aimerais pouvoir effectuer une requete du type : WHERE Realisateur like %$realisateur%.

Je ne vois pas d'ou viens le problème, si vous pouviez m'éclaire ...
0

#2 User is offline   shizo971 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 13-February 11
  • Location:Guadeloupe

Posted 04 July 2011 - 01:51 PM

bonjour,

depuis peu je me suis tourné aussi sur Yii que je trouve de plus en plus intéressant...

Pour ton soucis, je pense que tu devrais remplacer le "addSearchCondition" par quelque chose du genre:
$criteria->compare('realisateur',  $this->realisateur);
$criteria->condition = 'realisateur = :realisateur';
$criteria->params = array (':realisateur' => $_GET['realisateur']);

0

#3 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 631
  • Joined: 29-November 08
  • Location:Paris, France

Posted 04 July 2011 - 02:22 PM

Salut co-k-ine,
je te conseillerai d'activer les logs afin de pouvoir vérifier quelle est la requête SQL générée par Yii. Pour cela il faut modifier la configuration de la sorte :

	
		'db'=>array(
			'connectionString' => 'mysql:host=localhost;dbname=dbname',
			'emulatePrepare' => true,
			'enableParamLogging'=> true,
			'enableProfiling'=> true,
			'username' => 'root',
			'password' => '********',
			'charset' => 'utf8',

		),
		'log'=>array(
			'class'=>'CLogRouter',
			'routes'=>array(
				array(
					'class'=>'CFileLogRoute',
					'levels'=>'error, warning',
				),
				array(
					'class'=>'CWebLogRoute',
				),
				array(
					'class'=>'CProfileLogRoute',
					'levels'=>'trace,error,info,warning',
				),					
			),
		),


Ainsi tu pourras vérifier que la requête SQL est bien celle que tu souhaites.

@shizo971 : la modification que tu proposes va créer une requête comportant une condition '=' alors que la méthode addSearchCondition du CActiveRecord rajoute un condition 'LIKE'.

ciao
B)
0

#4 User is offline   Co-k-ine 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 29-March 10

Posted 05 July 2011 - 11:42 AM

Encore une fois raoul tu as été de très bon conseille, merci beaucoup !

Le log m'as pas mal aidé. Enfaite l'erreur venais des caractères, j'avais juste à faire :
$criteria->addSearchCondition('Realisateurs',$_GET['realisateur']) ;
(il fallait que j'enlève le utf8_decode() & base64_decode(); qui gainait l'encodage des caractères.
Je te remercie :)

Merci shizo971 pour ta methode, je m'en servirait plus tard dans le script.


EDIT : Je vois que a chaque chargement de page j'ai des requetes sql du type ::
Querying SQL: SHOW COLUMNS FROM `Films`

Ou
Querying SQL: SHOW CREATE TABLE `Films`


Existe-il un moyen de "mettre en cache" ces requêtes, pour éviter qu'elle soit exécuter à chaque fois. Je sais que sur le framework jelix, ils mettent ça dans un fichier .xml
0

#5 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 631
  • Joined: 29-November 08
  • Location:Paris, France

Posted 06 July 2011 - 03:35 PM

..content que tu aies résolu ton problème ;)


Concernant le cache, tu peux effectivement utiliser le cache de Yii avec des queries SQL et ainsi, ne pas solliciter te BDD à chaque requête. Je ne l'ai pas encore utilisé, mais ça à l'air intéressant. Pour tout savoir sur le sujet je te conseille un petit tour sur la documentation... ;)

ciao
Posted Image
0

#6 User is offline   Co-k-ine 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 88
  • Joined: 29-March 10

Posted 07 July 2011 - 06:58 AM

View PostRaoul, on 06 July 2011 - 03:35 PM, said:

..content que tu aies résolu ton problème ;)


Concernant le cache, tu peux effectivement utiliser le cache de Yii avec des queries SQL et ainsi, ne pas solliciter te BDD à chaque requête. Je ne l'ai pas encore utilisé, mais ça à l'air intéressant. Pour tout savoir sur le sujet je te conseille un petit tour sur la documentation... ;)

ciao
Posted Image


Ce n'est pas vraiment ce que je cherche. Car la je met en cache la requete sql moi je veux juste éviter de faire un "SHOW table" a chaque requête. Je sais que pour palier à ce problème le framework jelix utilise un fichier xml pour stocker la structure de la table.

Merci encore pour ton aide.
Bonne journée
0

#7 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 631
  • Joined: 29-November 08
  • Location:Paris, France

Posted 07 July 2011 - 09:42 AM

ah ok .. j'avais pas bien compris... regardes du côté du composant CDbConnection et de ses paramètres d'initialisation. Tu trouveras par exemple schemaCachingDuration qui fera peut-être l'affaire.

ciao
B)
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