yii2 BaseActiveRecord findAll () - Bedingungen mehr oder weniger als
Habe ich country-Datenbank-Tabelle (wie gefunden, in die Anleitung) dass ich test yii2 Entwicklung-Anwendung. Ich habe Feld population
und ich möchte erstellen Sie eine öffentliche Methode in Country
Modell, um alle Länder von bestimmten Bevölkerung Grenzen. ich.e gib alle Länder der Bevölkerung zwischen x und y.
Ich habe versucht, die folgenden:
//models/Country.php
....
public function getPopulationBetween($lower, $upper)
{
return Country::findAll(['population' => [">=".$lower, "<=".$upper]]);
}
In der CountryController:
public function actionGetBetween($lower, $upper)
{
print_r(Country::getPopulationBetween($lower, $upper));
}
Es gibt ein leeres array, i,e Array ()
Nun muss ich wissen, wie man den Zustand der findAll
zu sein, wie die SQL-Bedingung ... Where population >= 20000 AND population <= 40000000
ich.e Wie hinzufügen Vergleich zu der Bedingung mit der Verwendung eines Arrays?!
Anderen Seite -oder optional - Frage, Warum in Country.php beim Aufruf findAll
wie folgt:
public function getPopulationBetween($lower, $upper)
{
return $this->findAll(['population' => [">=".$lower, "<=".$upper]]);
}
Gibt es einen Fehler:
Unbekannte Methode – yii\base\UnknownMethodException
Aufruf unbekannte Methode: app\controllers\CountryController::findAll()
In anderen Worten, warum muss es als statisch?
InformationsquelleAutor SaidbakR | 2015-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie debug-Modul zu sehen, die generierte SQL-Abfrage.
In Ihrem Fall es wird sein:
Wie Sie sehen können, ist es definitiv falsch.
Überprüfen Sie die Dokumentation für findAll(), es ist nicht geeignet für eine solche Bedingung.
Verwenden
find()
statt.1)
Beachten Sie, dass in diesem Fall ist quoting und escaping nicht angewendet werden.
2)
Ändern sich auch die Erklärung der Methode
static
da es nicht abhängig von Objekt-Instanz.Bitte Lesen Sie diese und diese Abschnitte der offiziellen Dokumentation zu verstehen, wie
where
Teil der Abfrage erstellt.Vielleicht ist es besser, diese Methode in der angepassten query-Klasse. Sie können darüber Lesen Sie hier.
Die Antwort auf deine weitere Frage: sollten Sie nicht nennen
findAll()
im Objekt-Kontext, weil es die statische Methode vom framework-design.Überprüfen Sie die
yii\db\BaseActiveRecord
:$userDtls = Student::model ()->findAllByAttributes ( array ( 'id' => explode ( ",", $_POST ['studentIds'] ) ) );
in yii2sollte genug sein. Vergessen Sie nicht, überprüfen Sie das Vorhandensein der Daten aus
$_POST
und überprüfen, bevor Sie verwenden.Sie sollten nie das Vertrauen Daten aus$_POST
.also du meinst ich sollte so etwas tun
$id = $_POST['keylist']; $result = Users::findAll($id);
aber es funktioniert nicht und ich bekomme immer noch nur 1 Daten der erstenid
Eigentlich
Student::findAll($studentIds);
ist genug. Sollte es funktionieren, würde ich empfehlen, zu erstellen Sie separate Suche Modell und verwenden Sie es mit Validierung. Aber es ist eine Art andere Frage, Sie können erstellen neue Frage und ich werde versuchen zu erklären, Sie es. In deinem Beispiel sind Sie immer noch, direkt auf$_POST
ohne jede überprüfung oder Validierung.aber was soll ich definieren in
$studentIds
es gibt nichts in$studentIds
.. stackoverflow.com/questions/32856991/how-to-use-findall-in-yii2InformationsquelleAutor arogachev