我想在活动记录中写下一个查询。
SELECT *
FROM `User`
WHERE `UserId`
IN ( 6, 7, 8, 9 ) ;
由于
答案 0 :(得分:31)
您可以使用CDbCriteria
声明:
$criteria = new CDbCriteria();
$criteria->addInCondition('userId', array(6,7,8,9));
$result = User::model()->findAll($criteria);
答案 1 :(得分:10)
您可以将数组作为特定属性的值,如下所示(未经测试):
$model=new User();
$result=$model->findAllByAttributes(array('UserId'=>array(6,7,8,9)));
答案 2 :(得分:8)
如果您想更快地获得查询,请使用Command Builder:
Yii::app()->db->createCommand()
->select('*')
->from('user')
->where(array('in', 'UserId', array(6, 7, 8, 9)))
->queryAll();
要通过CActiveRecord获取,请使用findAllByAttributes
User::model()
->findAllByAttributes(array(
'UserId' => array(6,7,8,9)
));
但它将获得具有所有相关关系的User的完整对象,因此速度较慢。
答案 3 :(得分:4)
您可以通过CDbCriteria使用IN和BETWEEN语句:
$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(6,7,8,9));
$criteria->addBetweenCondition('id', '10', '20', 'OR');
$result = User::model()->findAll($criteria);
这将导致SQL查询如下:
SELECT *
FROM `User`
WHERE `id`
IN ( 6, 7, 8, 9 )
OR `id` BETWEEN 10 AND 20
请注意addBetweenCondition()方法中的第4个参数 OR ;如果缺少它,将应用默认的 AND 将该条件连接到WHERE查询的其余部分。
P.S。严格来说,应将addBetweenCondition()
和addInCondition()
方法添加到现有条件中。因此,您可能需要首先设置条件的初始条件,如下所示:
$criteria->condition = '1=1';
答案 4 :(得分:0)
我仍然使用这种方式:
public function getInterval( $data_start, $data_stop ){
$criteria = new CDbCriteria;
$criteria->condition = "date >= '$data_start' AND date <= '$data_stop'";
return $criteria;
}
$model = Object::model()->findAll(getInterval('2014-06-01','2014-06-30');
答案 5 :(得分:0)
在yii中有一个名为findAllBySql
的函数来运行sql查询并获取输出。
$sql="SELECT * FROM `User` WHERE `UserId` IN ( 6, 7, 8, 9 )";//Your Sql query
$value=User::model()->findAllBySql($sql);// "User" is the model belongs to the table 'User'
&#34; $ value&#34;将返回数组中的结果。要获取值,可以使用以下方法。
foreach($value as $val){
echo $val->UserId;
}
(或)
var index=0;
echo $val[$index]->UserId;
答案 6 :(得分:0)
您可以使用 addInCondition ,也可以使用比较方法。
$criteria = new CDbCriteria();
$criteria->compare('UserId',array(6,7,8,9));
$userDataObj = User::model()->findAll($criteria);