我如何表示此模型的关系: 我们有一个具有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'),
);
}
在这个方式$实体在雇主和工人模型之间交替!!
问题是它不起作用!!!我不知道为什么当Project model获取所有者(在用户中)时未设置u_type。实际上,在解释关系时没有设置任何内容。
答案 0 :(得分: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;