2017-08-10 1 views
1

Angenommen, wir haben eine Tabelle mit dem Namen "appointment" mit den Feldern "id", "date1" und "date2". Vorzugsweise Active verwenden, möchte ich diese SQL-Anweisung erreichen:Wie zwei Datenbanktabellenfelder in YII2 zu vergleichen?

select * from appointment where date1 <> date2 

Ist es möglich, dies mit Active Methoden für beispielsweise zu tun (Termin :: find()) oder sollte ich feste SQL-Codes übergeben?

Antwort

1

Sie einen SQL-Ausdruck, diese Bedingung zu einem bestimmten Abfrage

Appointment::find()->where(new \yii\db\Expression('`date1` <> `date2`')) 
1

Ich glaube, Sie so etwas wie dieses verwenden,

Appointment::find()->andWhere('date1 <> date2') 
        ->all(); 
+1

Ja passieren können, funktioniert das auch. aber wir sollten besser den Konzeptausdruck verwenden, wie in der erwähnten Dokumentation: "Ausdruck stellt einen DB-Ausdruck dar, der nicht entweichen oder quotieren muss. Ausdrucksobjekte werden hauptsächlich zum Übergeben von rohen SQL-Ausdrücken an Methoden von yii \ db \ Query erstellt. yii \ db \ ActiveQuery und verwandte Klassen " – Rev