我有A,B两个表,A和B关系是一对多。两个AR里都做了对应设置
现在我想以B表为主,查询条件是A表中PID = n 的记录。
使用
B::model()->with(array(‘A’=>array(‘condition’=>‘pid=n’)))-> findAll()
但这样仍然是将所有的B表记录给查出来了。
请问如何使用才是正确的方式。
即类似于
SELECT * FROM B
LEFT JOIN A ON(A.ID=B.ID)
WHERE A.PID = N
这种模式
我有A,B两个表,A和B关系是一对多。两个AR里都做了对应设置
现在我想以B表为主,查询条件是A表中PID = n 的记录。
使用
B::model()->with(array(‘A’=>array(‘condition’=>‘pid=n’)))-> findAll()
但这样仍然是将所有的B表记录给查出来了。
请问如何使用才是正确的方式。
即类似于
SELECT * FROM B
LEFT JOIN A ON(A.ID=B.ID)
WHERE A.PID = N
这种模式
试一下 ??.pid=n
帮 peteryu 顶了~
在Yii中支持自定义查询方式,提供了CDbCriteria类,该类提供以下属性:
select:要查询的字段列表,默认是”*”,
distinct:是否在查询语句中使用distinct
condition:查询条件,如:‘age>31 AND team=1’
params:查询参数,如:array(’:name’=>‘Dan’, ‘:age’=>31)
limit:最大返回记录条数,如果小于0表示不限制
offset:返回记录的起始位置,如果小于0表示从开始查询
order:排序方式,如:
group:分组方式,如:‘projectID, teamID’
join:连接查询方式,如:‘LEFT JOIN users ON users.id=authorID’
having:分组条件,如:'SUM(revenue)<50000
本人代码中的一个例子:
$criteria=new CDbCriteria;
$criteria->select='MessageId,Title,ToUserID,IsRead,PostDate,FromUserID';
$criteria->condition='MessageList.FromUserID='.Yii::app()->user->id;
$criteria->order='MessageId desc';
$pages=new CPagination(messagelist::model()->count($criteria));
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
$models=messagelist::model()->with('userList')->findAll($criteria);