我的模型有问题,因为我的关系与FK列的名称相同。
class Post extends CActiveRecord {
public function relations() {
return array(
'user' => array(self::BELONGS_TO, 'User', 'user')
);
}
}
如何将user
列映射到其他内容,以便我可以使用不同的名称访问关系和FK?我无法修改数据库列,因为其他应用程序依赖于它。
我希望能够做到这一点:
$post = Post::findByPk(1);
$post->user_id; // returns foreign key
$post->user; // returns activerecord
下面的实现也没问题,但使用上面的关系Yii只返回[0=>1242]
的{{1}}。
$post->user
我特别不想要这样的东西:
$post->user;
$post->user->user_id;
TLDR:如何将FK列映射到不同的属性,以便它不会与关系冲突。
答案 0 :(得分:0)
据我所知,Post模型中的FK为用户模型user_id
而不是user
。
$post->user_id; // returns foreign key
如果不是这样,只需将您的帖子模型修改为此表单,其中user_id
保留相关用户模型的ID。
那么你就这样建立关系:
public function relations() {
return array(
'user' => array(self::BELONGS_TO, 'User', 'user_id')
);
}
现在不应该有冲突,你可以按照自己的意愿去做:
$post = Post::findByPk(1);
$post->user_id; // returns foreign key
$post->user; // returns activerecord
我刚注意到:
我无法修改数据库列,因为其他应用程序依赖于它。
一种糟糕的应用程序设计。
我特别不想要这样的东西:
$post->user; // Returns FK
$post->userobject; // Returns ActiveRecord. Ugly!
如何将FK列映射到不同的属性,以便它不会与关系冲突
我不会做这样的事情:
function getUser_id(){
return $this->user;
}
似乎无法解决的情况,因为你试图避免$post->userobject
!
$post->userModel
怎么样?
如果您坚持将user
FK和user
作为相关模型参考,那么您将进入长期的车辙。