使用YII搜索连接表

时间:2012-06-12 18:49:17

标签: php mysql yii

我有以下表格结构。 tb_posts具有与tb_author.id相关的字段author_id 在YII中,我在帖子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);

2 个答案:

答案 0 :(得分:1)

在init设置模型的表别名。

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

答案 1 :(得分:1)

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

代码的第二部分没有任何错误,如果正确设置关系,搜索应该有效。