1

我有以下表结构。tb_posts 具有与 YII 中的 tb_author.id 相关的字段 author_id 我的帖子中有以下内容 activeRecord

public function relations()
{

    return array(
        'authorRelation' => array(self::BELONGS_TO, 'authorRecord', 'author')
    );
}

我如何搜索名为“foo”的作者的帖子?我正在尝试以下但没有成功

$criteria=new CDbCriteria;
$criteria->with = array('authorRelation');
$criteria->together = true;
$criteria->compare( 'author.name', 'foo', true );
$posts=PostsRecord::model()->findAll($criteria);
4

2 回答 2

1

在初始化时为您的模型设置表别名。

class PostsRecord extends CActiveRecord
{
    // ...
    public function init() { $this->setTableAlias( 'postsrecord' ); }
    // ...
}

class AuthorRecord extends CActiveRecord
{
    // ...
    public function init() { $this->setTableAlias( 'authorrecord' ); }
    // ...
}

最后:

$condition=new CDbCriteria;
$condition->with = array('authorRelation');
$condition->together = true;
$condition->condition = 'authorrecord.name=:authorname';
$condition->params = array( ':authorname' => 'foo' );
$posts=PostsRecord::model()->findAll($condition);
于 2012-06-12T19:15:58.993 回答
1

你的关系应该是'authorRelation' => array(self::BELONGS_TO, 'authorRecord', author_id')。第三个参数是外键。

代码的第二部分没有任何错误,如果您正确设置了关系,搜索应该可以工作。

于 2012-06-12T19:19:20.593 回答