gpt4 book ai didi

php - 如何表示引用一个主键的两个外键的 yii 关系?

转载 作者:行者123 更新时间:2023-11-29 00:35:14 26 4
gpt4 key购买 nike

我如何表示这个模型的关系:我们有一个具有 PKey 的用户表。用户有两种类型:雇主和 worker -> 这两个表保存一个 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 以这种方式在雇主和 worker 模型之间交替!!

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

最佳答案

好吧,关系函数在模型初始化时调用,它没有任何属性。当你 $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;

关于php - 如何表示引用一个主键的两个外键的 yii 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662016/

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