【问题标题】:how to represent yii relations of two foreign keys refrencing one primary key?如何表示两个外键引用一个主键的 yii 关系?
【发布时间】:2013-02-02 12:44:02
【问题描述】:

我如何表示这个模型的关系: 我们有一个包含 PKey 的用户表。用户有两种类型:雇主和工人 -> 这两个表保存了一个 Fkey 重新引用到用户 PKey。

我已经在用户模型中编写了类似的代码:

public function userTypeMapper($type) 
{
    switch ($type) {
        case 'w':
            return 'Worker';            
        case 'e':
            return 'Employer';          
        case 'a':
            return 'Admin';         
        default:
            return 'Employer';          
            return 'Guest';         
    }
}   
/**
 * @return array relational rules.
 */
public function relations()
{
    $entity = $this->userTypeMapper($this->u_type);
    return array(
        'entity' => array(self::HAS_ONE, $entity,  'u_id'),
        'projects' => array(self::HAS_MANY, 'Project', 'pr_u_id'),
    );
}

这样 $entity 在雇主和工人模型之间交替!!

问题是它不起作用!!!我不知道为什么当项目模型获取所有者(在用户中)时未设置 u_type。实际上,在解释关系时没有设置任何内容。

【问题讨论】:

  • 你遇到了什么错误?
  • 问题是当我在项目模型中访问用户时,$this 对象中没有定义任何内容!所以 $this->u_type 也没有定义,而且 ...

标签: php mysql frameworks yii


【解决方案1】:

好吧,关系函数在模型初始化时调用,它没有任何属性。当你$user = new User(); 你的模型User 已经有初始化关系。 您必须设置所有关系:

public function relations()
{
    return array(
        'Worker' => array(self::HAS_ONE, 'Worker',  'u_id'),
        'Employer' => array(self::HAS_ONE, 'Employer',  'u_id'),
        'Admin' => array(self::HAS_ONE, 'Admin',  'u_id'),
        'Guest' => array(self::HAS_ONE, 'Guest',  'u_id'),
        'projects' => array(self::HAS_MANY, 'Project', 'pr_u_id'),
    );
}

/**
 * Get entity
 */
public function getEntity()
{
    switch ($this->u_type) {
        case 'w':
            return $this->Worker;
        case 'e':
            return $this->Employer;
        case 'a':
            return $this->Admin;
        default:
            return $this->Guest;
    }
}

当你想要获取实体模型时,你只需调用

$user   = User::model()->findByPk($user_id);
$entity = $user->entity;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2017-01-16
    • 2023-03-17
    • 2018-03-25
    相关资源
    最近更新 更多