N'EST PAS NULL pas de travail dans Yii Active Record
Je suis en train d'essayer quelque chose comme ceci:
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('user_details_id', $this->user_details_id);
$criteria->compare('user_type_id', $this->user_type_id);
$criteria->compare('customer_basics_id', $this->customer_basics_id);
$criteria->compare('user_address_id', $this->user_address_id);
$criteria->compare('user_city_id', $this->user_city_id);
$criteria->compare('is_active', $this->is_active);
$criteria->compare('create_dttm', $this->create_dttm, true);
$criteria->compare('update_dttm', $this->update_dttm, true);
//if condition is working
if (isset($_GET['ulip'])) {
$criteria->addCondition(
"customer_basics_id=" . CustomerBasics::getCustomerBasicsId(Yii::app()->session['user_id']), "AND"
);
$criteria->addCondition("user_city_id IS NULL");
//else condition is working
} else {
$criteria->addCondition(
"customer_basics_id=" . CustomerBasics::getCustomerBasicsId(Yii::app()->session['user_id']), "AND"
);
$criteria->addCondition("user_city_id IS NOT NULL");
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
),
));
}
Ici la question est if
condition fonctionne très bien et la présentation des résultats en fonction de la condition, mais d'autre part ne fonctionne pas et ne retourne rien. Je pense que IS NOT NULL
n'est pas de travail ici.
Quel est le problème ?
essayez
sa ne fonctionne pas
Hmm, je ne vois rien d'autre, et ce post montre que vous avez la bonne syntaxe stackoverflow.com/questions/18954600/... Tout ce que je pouvais éventuellement suggérer, c'est d'essayer de mettre une valeur statique comme
Êtes-vous sûr qu'il y a toutes les données sont retournées à votre état de santé (user_city_id n'EST PAS NULLE) en DB?
Oui
NOT ISNULL(user_city_id)
sa ne fonctionne pas
Hmm, je ne vois rien d'autre, et ce post montre que vous avez la bonne syntaxe stackoverflow.com/questions/18954600/... Tout ce que je pouvais éventuellement suggérer, c'est d'essayer de mettre une valeur statique comme
$criteria->addCondition("user_city_id = 1");
ou quelque chose de similaire pour s'assurer qu'il fonctionne jusqu'à ce point.Êtes-vous sûr qu'il y a toutes les données sont retournées à votre état de santé (user_city_id n'EST PAS NULLE) en DB?
Oui
OriginalL'auteur Sky | 2013-12-12
Vous devez vous connecter pour publier un commentaire.
La raison Principale.
Dans votre table de base de données de la colonne(user_city_id), vous avez des valeurs Vides pas les valeurs NULL.
Si votre requête est incapable de fonctionner "EST NULL" et "n'EST PAS NULL" sur la colonne correspondante.
Vous pouvez en lire plus ici
Pas besoin d'ajouter de l'opérateur pour la première addCondition
Pour votre information, Lors de l'ajout d'une condition à vos critères, pas besoin d'ajouter "ET" opérateur becoz par défaut "ET" est l'opérateur dans addConditon. Et pas utiliser si vous ajoutez de l'opération pour la première addCondition, Vous devez ajouter ce pour votre prochain addConditions si vous en avez.
La Solution est
Je n'aime pas déranger de recherche par défaut de méthode dans mon modèle. Que je suis en utilisant le Framework MVC, je doit suivre au moins certains MVC règles. Sinon il n'y a pas de sens à l'aide de cette MVC. Ainsi, l'accès à $_GET trucs dans mon Modèle n'est pas bon ici. donc, je suis en création d'une nouvelle méthode dans mon Modèle à deux paramètres.
Maintenant, je suis en utilisant cette méthode de modèle de mon contrôleur
Je l'espère, il va certainement résoudre votre problème.
Vous êtes les bienvenus.
OriginalL'auteur Hearaman
Je ne suis pas vraiment sûr que cela va vraiment prendre soin de votre problème. Mais au moins, il adhère à la sécurité des pratiques de codage:
Simple: Pas de concaténation de chaîne à construire la requête pièces et plus sûr de liaison de paramètre. Il n'est plus faux
compare()
pour lacustomer_basics_id
etuser_city_id
. Je soupçonne celui-ci a été à l'origine des troubles.Je viens de me mettre à ma place
OriginalL'auteur DaSourcerer
J'ai juste créé une table dans MySQL, modèle, crud, basé sur vos champs et vos critères de recherche, en plus des données de test. Dans mes tests, tout fonctionne, les deux conditions de générer des résultats.
Si vous avez besoin plus d'informations à propos de mes tests, n'hésitez pas à demander. Je suppose que l'erreur est connecté avec des données d'entrée, donc je suggère pour activer le mode de débogage, ajoutez journal composant à votre config et après que regarde sur les requêtes sql du yii générer.
OriginalL'auteur sim
Peut-être
$criteria->addCondition("user_city_id <> '' ");
résoudre le problème, car n'EST PAS NULL interprété comme vrai et NULL comme valeur false.OriginalL'auteur Cherif BOUCHELAGHEM