我有两个表,accounts
和box
。我需要将id
的{{1}}字段与accounts
的{{1}}字段相关联。这通常很简单,但字段uid
有一个前缀。我无法改变数据库设计,不幸的是我坚持使用它。
例如,如果我的帐户box
为uid
,则框中的字段将为id
。前缀始终相同,并始终用下划线分隔。
我目前有以下内容。
1
我无法操纵uid = prefix_1
值,因为我不断收到错误:
'rl_account'=>array(self::BELONGS_TO, 'Accounts', '', 'foreignKey' => array(),'condition'=>'accounts.id = substring(column_name, instr(box.uid, "_") + 1)'),
或者我收到错误:
uid
如果我将Unknown column 'accounts.id' in 'where clause'
更改为Unknown column 'uid' in 'where clause'
。有谁知道如何使用关系实现这一点,还是我需要为此创建一个新方法?例如
accounts.id
如果有某种方式我可以改变id
我相信我可以从那里做到。
答案 0 :(得分:0)
你试过
吗?'rl_account'=>array(self::BELONGS_TO, 'Accounts', '', 'on' => 'box.uid = CONCAT("prefix_", accounts.id)'),
答案 1 :(得分:0)
我有一个问题的解决方案,虽然不是一行,但尽可能接近。我不确定如果不使用我选择的方法或其他类似的方法,这是可能的,因为没有搜索产生答案,我也没有看到很多人试图这样做。
我的解决方案如下。在模型顶部创建一个公共变量:
public $noPrefix;
在find之后,我调用一个剥离前缀的方法,并根据需要给我留下id。
public function afterfind()
{
$this->oldRecord=clone $this;
$this->noPrefix= self::model()->stripUid($this->uid);
parent::afterFind();
}
我现在拥有了我需要的id的模型的新属性。我现在可以用标准方式创建关系。
'rl_account'=>array(self::BELONGS_TO, 'Accounts', 'noPrefix'),