YII中的关系不是"ID"作为主键

Kon*_*nia 2 yii

我有一个模型Anketa,它user_id不仅仅是主键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 )
    ',
),  
);
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图获得这个属性时,我得到"Property"Anketa.id"没有定义." 错误.

我在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;
}
Run Code Online (Sandbox Code Playgroud)

此块id由于某种原因而不是返回user_id.我不知道这是不是一个错误,因为其他关系工作正常,但它们并不像这个那么复杂.

为什么会这样?我怎样才能解决这个问题?

谢谢!

Dar*_*kke 7

尝试将PK字段留空并使用'on'条件覆盖.

function relations()
{
    return array(
        'last_experience' => array(
            self::HAS_ONE,
            'Experience',
            '',
            'on' => 'user_id=last_experience.user_id'
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)