我的模型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 )
',
),
);
}
但是当我尝试获取此属性时,我得到“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;
}
此块因某种原因而不是id
返回user_id
。我不知道这是不是一个错误,因为其他关系工作正常,但它们并不像这个那么复杂。
为什么会这样?我该如何解决这个问题?
谢谢!
答案 0 :(得分:7)
尝试将PK字段留空并使用'on'条件覆盖。
function relations()
{
return array(
'last_experience' => array(
self::HAS_ONE,
'Experience',
'',
'on' => 'user_id=last_experience.user_id'
),
);
}