首页 文章

Cakephp - 一个表的多个模型

提问于
浏览
2

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

通常,将存在三种类型的用户: Admininistrator ,_ Location ManagerExaminer .

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

我将如何在每个模型中 Build 关系 .

我的第一个想法是:

//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?

1 回答

  • 2

    当然,您可以使用相同的表名创建不同的模型 . 为此,请使用$ 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()回调应用于Administrator / Examiner / ...模型,这将删除不需要的其他角色的用户,但当然它不是一个有效的解决方案 .

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

相关问题