Yii,与FK同名的关系,重命名字段

时间:2014-12-06 14:52:41

标签: php yii orm

我的模型有问题,因为我的关系与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列映射到不同的属性,以便它不会与关系冲突。

1 个答案:

答案 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作为相关模型参考,那么您将进入长期的车辙。