yii2 BaseActiveRecord findAll () conditions supérieures ou inférieures à
J'ai de pays de table de base de données (comme trouvé dans le guide) que je test yii2 le développement de l'application. J'ai du champ population
et je veux créer une méthode publique dans Country
modèle de retourner tous les pays de certaines limites de la population. j'.e retour de tous les pays de population entre x et y.
J'ai essayé le suivant:
//models/Country.php
....
public function getPopulationBetween($lower, $upper)
{
return Country::findAll(['population' => [">=".$lower, "<=".$upper]]);
}
Dans le CountryController:
public function actionGetBetween($lower, $upper)
{
print_r(Country::getPopulationBetween($lower, $upper));
}
Elle renvoie un tableau vide i,e Array ()
Maintenant, j'ai besoin de savoir comment définir la condition de findAll
être comme le SQL condition ... Where population >= 20000 AND population <= 40000000
je.e Comment ajouter de la comparaison de l'état avec l'aide d'un tableau?!
Un autre côté -ou, en option - question, Pourquoi dans Country.php lors de l'appel de findAll
comme suit:
public function getPopulationBetween($lower, $upper)
{
return $this->findAll(['population' => [">=".$lower, "<=".$upper]]);
}
Il retourne une erreur:
Méthode inconnue – yii\base\UnknownMethodException
L'appel de méthode inconnue: app\controllers\CountryController::findAll()
En d'autres termes, pourquoi doit-elle appelée statiquement?
source d'informationauteur SaidbakR
Vous devez vous connecter pour publier un commentaire.
Utiliser debug module de voir la requête SQL générée.
Dans votre cas, ce sera:
Comme vous pouvez le voir, il est absolument faux.
Consultez la documentation de findAll()il n'est pas convenable pour une telle condition.
Utilisation
find()
à la place.1)
Noter que dans ce cas, citant et l'échappement ne sera pas appliqué.
2)
Également modifier la déclaration de la méthode à
static
depuis qu'il ne dépend pas de l'objet de l'instance.Veuillez lire cette et cette sections de la documentation officielle de comprendre comment
where
partie de la requête est construite.C'est peut-être mieux de mettre cette méthode en personnalisé en classe de requête. Vous pouvez lire à ce sujet ici.
La réponse à votre question supplémentaire: vous ne devez pas appeler
findAll()
dans le contexte de l'objet parce qu'il est statique de la méthode de conception du cadre.Vérifier la
yii\db\BaseActiveRecord
: