Cakephp-一个表的多个模型

Cakephp-一个表的多个模型,php,cakephp,Php,Cakephp,我有一个用户模型,用于存储牙科检查系统用户的数据 通常,将存在三种类型的用户:管理员、位置管理器和考官 在我的应用程序中,似乎有必要将这三个角色视为单独的模型(想象一下,对于每个角色,我会有不同的视图和不同的选项等等……这是一场噩梦) 我将如何在每个模型中建立关系 我的第一个想法是: //Administrator Model class Administrator extends User { $name = 'Administrator'; $table = 'User';

我有一个用户模型,用于存储牙科检查系统用户的数据

通常,将存在三种类型的用户:管理员位置管理器考官

在我的应用程序中,似乎有必要将这三个角色视为单独的模型(想象一下,对于每个角色,我会有不同的视图和不同的选项等等……这是一场噩梦)

我将如何在每个模型中建立关系

我的第一个想法是:

//Administrator Model
class Administrator extends User {
    $name = 'Administrator';
    $table = 'User';
    $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'conditions' => array('User.role' => 'administrator'), 
        )
    );
}
然后用户模型将使用hasMany引用这个?根据CakePHP约定,如何准确地对其进行建模


此外,此模型会扩展用户模型还是应用模型?

当然,您可以使用相同的表名创建不同的模型。为此,请将每个模型链接到具有$useTable属性(而不是$table)的特定表:

但我不知道有什么CakePHP模型属性允许您在获取结果时过滤返回的数据。。。在将模型与另一个模型链接时,只能编写自己的条件,例如:

class SomeOtherModel extends AppModel {
    public $hasMany = array(
        'Administrator' => array(
            'className' => 'Administrator',
            'conditions' => array('Administrator.role' => 'administrator')
        )
    );
}
这不是一个好的解决方案,因为它仅在对其他模型执行查询时才起作用

您还可以尝试将afterFind()回调应用于管理员/Examiner/。。。模型将删除另一个角色的用户,但这当然不是一个有效的解决方案

另一个解决方案是创建不同的数据库视图,其中只包含选定角色的用户(更多关于视图-)。然后,您可以将每个视图指向您的CakePHP模型,就像它是一个普通的数据库表一样。
但这一解决方案也并不完美。如果将来必须添加新的用户角色或更改表架构,还必须修改数据库视图。

为什么?!你就不能根据角色为每个用户添加一个带有相关数据的“选项”模型吗?我同意,为每个用户类型提供完全不同的模型可能不是最好的设计。但我不知道足够的细节来确定。至于你的问题-用户模型应该只有管理员、位置管理员或考官中的一个,所以hasOne应该是关系。很可能您只希望其他模型、管理员等扩展AppModel,而不是用户。
class SomeOtherModel extends AppModel {
    public $hasMany = array(
        'Administrator' => array(
            'className' => 'Administrator',
            'conditions' => array('Administrator.role' => 'administrator')
        )
    );
}