我有一个模型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 )
',
),
);
}
但是,当我试图获得这个属性时,我得到的“属性”"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
。我不知道这是否是个bug,因为其他关系很好,但它们并不像这个那样复杂。
为什么会发生这种事?我怎么才能解决这个问题?
谢谢!
发布于 2013-01-08 13:15:03
尝试将PK字段保持为空,并使用“on”条件覆盖。
function relations()
{
return array(
'last_experience' => array(
self::HAS_ONE,
'Experience',
'',
'on' => 'user_id=last_experience.user_id'
),
);
}
https://stackoverflow.com/questions/13716666
复制相似问题