gpt4 book ai didi

yii - YII 中以非 "ID"作为主键的关系

转载 作者:行者123 更新时间:2023-12-05 01:22:12 26 4
gpt4 key购买 nike

我有一个 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;
}

由于某些原因,此 block 返回 id 而不是 user_id。我不知道这是否是一个错误,因为其他关系工作正常,但它们没有这个复杂。

为什么会这样?我该如何解决这个问题?

谢谢!

最佳答案

尝试将 PK 字段留空并使用“开启”条件覆盖。

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

关于yii - YII 中以非 "ID"作为主键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com