Yii2 Wie führt man eine AND- oder OR-Bedingungsgruppierung durch?
Lesezeit: 2 Minuten
Ich bin neu im Yii-2-Framework. Wie kann ich die folgende Abfrage im Yii-2-Framework mit activeQuery und Modellen erreichen.
SELECT * FROM users AS u WHERE u.user_id IN(1,5,8) AND (u.status = 1 OR u.verified = 1) OR (u.social_account = 1 AND u.enable_social = 1)
Vielen Dank
Gouki
Sie können dies versuchen:
//SELECT * FROM users AS u WHERE u.user_id IN(1,5,8) AND (u.status = 1 OR u.verified = 1) OR (u.social_account = 1 AND u.enable_social = 1)
$model = arname()->find()
->andWhere(['user_id'=>[1,5,8]])
->andWhere(['or',
['status'=>1],
['verified'=>1]
])
->orWhere(['and',
['social_account'=>1],
['enable_social'=>1]
])
->all();
Ich gehe davon aus, dass Sie bereits über die Datenbankkonfiguration in Yii 2.0 Bescheid wussten, die im Grunde dieselbe ist wie in der Version Yii 1.0.
Wenn Sie activeQuery verwenden möchten, müssen Sie zuerst eine ‚USERS‘-Klasse definieren:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class USERS extends ActiveRecord {
public static function tableName()
{
return 'users';
}
}
?>
Wenn Sie es dann verwenden, können Sie es wie folgt schreiben:
<?
$usr_data = USERS::find()->
->where("user_id IN(1,5,8) AND (status = 1 OR verified = 1) OR (social_account = 1 AND enable_social = 1)")
->all();
?>
Meiner Meinung nach bietet Ihnen die aktive Abfrage eine Möglichkeit, SQL nach Unterblöcken zu trennen. Aber es macht keinen Sinn, es anzuwenden, wenn Sie eine so komplizierte ‘AND OR’ WHERE-Bedingung haben.