请教一个关联查询的用法

我有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);