1

次のテーブル構造があります。tb_posts には、YII の tb_author.id に関連するフィールド author_id があります

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

あなたの関係はである必要があります'authorRelation' => array(self::BELONGS_TO, 'authorRecord', author_id')。3番目のパラメーターは外部キーです。

コードの2番目の部分にはエラーがありません。リレーションを正しく設定すれば、検索は機能するはずです。

于 2012-06-12T19:19:20.593 に答える
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);
于 2012-06-12T19:15:58.993 に答える