2

user_idだけでなく、主キーとして持つモデル Anketa を持っていidます。そして、私はそれのために HAS_ONE リレーションを作成したいので、これをコーディングします:

function relations()
{
return array(
...
'last_experience' => array(
    self::HAS_ONE, 'Experience', 'user_id',
    'condition' => '
        `signoff` = (
        SELECT MAX( `signoff` )
        FROM `experience` AS t2
        WHERE t2.user_id = last_experience.user_id )
    ',
),  
);
}

しかし、このプロパティを取得しようとすると、「Property "Anketa.id" is not defined.」というメッセージが表示されます。エラー。

CActiveFinder.php ファイルで、次のことを行うコードを見つけました。

if($this->relation instanceof CBelongsToRelation)
{
    if(is_int($i))
    {
        if(isset($parent->_table->foreignKeys[$fk]))  // FK defined
            $pk=$parent->_table->foreignKeys[$fk][1];
        else if(is_array($this->_table->primaryKey)) // composite PK
            $pk=$this->_table->primaryKey[$i];
        else
            $pk=$this->_table->primaryKey;
    }
    $params[$pk]=$record->$fk;
}

このブロックはid、何らかの理由で の代わりに戻りますuser_id。バグかどうかはわかりませんが、他のリレーションは問題なく機能しますが、このリレーションほど複雑ではありません。

なぜそれが起こるのですか?どうすればこれを修正できますか?

ありがとうございました!

4

1 に答える 1

7

PK フィールドを空のままにして、'on' 条件オーバーライドを使用してみてください。

function relations()
{
    return array(
        'last_experience' => array(
            self::HAS_ONE,
            'Experience',
            '',
            'on' => 'user_id=last_experience.user_id'
        ),
    );
}
于 2013-01-08T13:15:03.580 に答える