我有一个用户模型,用于存储 dentry 检查系统用户的数据。
通常存在三种类型的用户:管理员、位置管理员和检查员。
似乎有必要在我的应用程序中将这三个角色视为单独的模型(想象一下我如何对具有不同选项的每个角色有不同的 View 等......这是一场噩梦)。
我将如何在每个模型中建立关系。
我的第一个想法是:
//Administrator Model
class Administrator extends User {
$name = 'Administrator';
$table = 'User';
$belongsTo = array(
'User' => array(
'className' => 'User',
'conditions' => array('User.role' => 'administrator'),
)
);
}
然后用户模型将使用 hasMany 引用这个模型?就 CakePHP 约定而言,如何准确地对其进行建模?
此外,这个模型会扩展 User 模型还是 AppModel 吗?
最佳答案
当然,您可以使用相同的表名创建不同的模型。为此,请使用 $useTable 属性(而不是 $table)将每个模型与特定表链接起来:
class Administrator extends AppModel {
public $useTable = 'User';
}
但是我不知道任何 CakePHP 模型属性可以让您过滤获取结果时返回的数据...您只能在将模型与另一个模型链接时编写自己的条件,例如:
class SomeOtherModel extends AppModel {
public $hasMany = array(
'Administrator' => array(
'className' => 'Administrator',
'conditions' => array('Administrator.role' => 'administrator')
)
);
}
这不是一个好的解决方案,因为它仅在执行 SomeOtherModel 模型的查询时才有效。
您还可以尝试将 afterFind() 回调应用于您的管理员/审查员/...模型,这将删除所需角色的用户,但这当然不是一个有效的解决方案。
另一个解决方案是创建不同的数据库 View ,其中仅包含所选角色的用户(更多关于 View - here )。然后,您可以将每个 View 指向 CakePHP 模型,就像它是一个普通的数据库表一样。 但这个解决方案也并不完美。如果您将来必须添加新的用户角色或更改表架构,则还必须修改数据库 View 。
关于php - Cakephp - 一张表的多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967556/