简体   繁体   English

在Yii中返回CActiveDataProvider

[英]return CActiveDataProvider in Yii

I have 4 database table: 我有4个数据库表:

User : id, username, password 用户名:id,用户名,密码

Floor : id, userid, name 楼层 :ID,用户ID,名称

Room : id, floor, name 房间 :ID,楼层,名称

Student : id, room, name, active 学生 :身份证,房间,姓名,现役

How to return CActiveDataProvider for the follow SQL command? 如何为跟随的SQL命令返回CActiveDataProvider?

SELECT * FROM `student` WHERE `student`.`active` = 0 AND `student`.`room` IN (SELECT `room`.`id` FROM `room` WHERE `room`.`floor` = (SELECT `floor`.`id` FROM `floor` WHERE `floor`.`userid` = $userid))

I tried: 我试过了:

$model = Student::model()->findAllBySql("SELECT * FROM student WHERE active = 0 AND room IN (SELECT id FROM room WHERE floor = (SELECT id FROM floor WHERE user = $user))");
return new CActiveDataProvider($model);

But response: 但是回应:

Fatal error: Call to a member function getDbCriteria() on a non-object in X:appserv\\www\\framework\\web\\CActiveDataProvider.php on line 225 致命错误:在第225行的X:appserv \\ www \\ framework \\ web \\ CActiveDataProvider.php中的非对象上调用成员函数getDbCriteria()

Named placeholder is useful. 命名占位符很有用。

$criteria = new CDbCriteria;
$criteria->condition = 'student.active = 0 AND student.room IN (SELECT room.id FROM room WHERE room.floor = (SELECT floor.id FROM floor WHERE floor.userid = :userid))';
$criteria->params=array(':userid'=>$userid);
$dataProvider = new CActiveDataProvider('Student',array('criteria'=>$criteria,));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM