php - Cakephp - 一张表的多个模型

标签 php cakephp

我有一个用户模型,用于存储 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/

相关文章:

cakephp 3.0 使用 tableprefix 吗?

cakephp - 如何在cakephp中的$this->paginate()中传递自定义mysql查询?

mysql - CakePHP 在多个 HABTM 表中搜索

PHP/SQL - 多个连接?

php - 安装错误: Overwrite Akeneo ProductController

php - Go 与 PHP json-rpc 通信

cakephp - 如何测试用户是否在 Cakephp 2.0 auth 组件中处于事件状态?

java - 如何将 Unity webapp 放到 Google 应用引擎上

php - 测试用户的 Paypal 详细信息

php - CakePHP:使用多级可包容行为