我有以下表格结构。 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);
答案 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')
。第三个参数是外键。
代码的第二部分没有任何错误,如果正确设置关系,搜索应该有效。