首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >YII中以非"ID“为主键的关系

YII中以非"ID“为主键的关系
EN

Stack Overflow用户
提问于 2012-12-05 05:06:45
回答 1查看 4.4K关注 0票数 2

我有一个模型Anketa,它把user_id作为主键,而不仅仅是id。我想为它创建一个HAS_ONE关系,所以我编写了以下代码:

代码语言:javascript
运行
复制
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文件中找到了一些代码,这些代码执行以下操作:

代码语言:javascript
运行
复制
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,因为其他关系很好,但它们并不像这个那样复杂。

为什么会发生这种事?我怎么才能解决这个问题?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-08 13:15:03

尝试将PK字段保持为空,并使用“on”条件覆盖。

代码语言:javascript
运行
复制
function relations()
{
    return array(
        'last_experience' => array(
            self::HAS_ONE,
            'Experience',
            '',
            'on' => 'user_id=last_experience.user_id'
        ),
    );
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13716666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档