【问题标题】:cakephp column mappingcakephp 列映射
【发布时间】:2011-01-26 01:32:30
【问题描述】:

我刚刚开始使用 CakePHP,所以我是一个在这个框架中工作的完整新手,并且已经使用了一个具有非常糟糕的数据库结构的遗留系统。我进去并将主键添加到没有它们的表中。但是,我找不到有关在模型中映射列的位置的信息,并且可以使用一些链接,以便我可以在该区域中定位。我从他们的用户表开始,它被命名为“系统”。我创建了一个名为 User 的模型:

class User extends AppModel {
    var $name = 'User'; 
    var $useTable = 'system';       
}

我想在不更改现有数据库的情况下将列映射到更符合约定的属性名称,因为它们当前正在使用该表。表结构为:

Table: system

Field Name     DataType     Nullable   Default
------------------------------------------------------------------
user_id        tinyint(4)   No         None AUTO_INCREMENT
s_rec_type     tinyint(4)   Yes        NULL
s_user_id      varchar(20)  Yes        NULL
s_init         char(2)      Yes        NULL 
s_password     varchar(12)  Yes        NULL
admin_access   tinyint(4)   No         0
fname          varchar(50)  No
lname          varchar(50)  No
email_address  varchar(50)  Yes        NULL
created        datetime     Yes        NULL
modified       datetime     Yes        NULL

// I added email_address, created, and modified.

我想将模型中的列映射如下:

user_id       -> Id
s_rec_type    -> UserType
s_user_id     -> UserName
s_init        -> Initials
s_password    -> Password
admin_access  -> AdminAccess
fname         -> FirstName
lname         -> LastName
email_address -> EmailAddress
created       -> Created
modified      -> Modified

这样我就可以使用 $this->User->findAllById($id) 或 $this->User->findByInitials('sb') 之类的方法或通过 $this->User->id 访问 id而不是像 $this->User->user_id 这样的东西,并且使用更易于理解的代码与命名约定更加一致。

此表还将用于确定用户可以访问哪些菜单选项以及用户可以访问哪些页面。我稍后会处理。

【问题讨论】:

  • 阅读更多有关 cakephp 约定的信息,表格应始终使用下划线,而不是像您所拥有的驼峰式.. 姓氏,而不是姓氏

标签: cakephp


【解决方案1】:

我会看看virtual fields。您的模型属性初始化可能如下所示:

var virtualFields = array (
    'UserType' => 's_rec_type',
    'UserName' => 's_user_id',
    'Initials' => 's_init',
    .....
    'Modified' => 'modified'
);

【讨论】:

  • 就是这样,除了我最初的字段颠倒了这让我感到困惑,用我试图替换的字段切换虚拟字段。使用我的虚拟字段,默认的 Auth 魔法效果很好。
【解决方案2】:

【讨论】:

  • 我已经看过了,没有关于映射列的内容。由于 cakePHP 自动魔术,我已经遇到了列名问题,因为 s_user_id 以“id”结尾,系统将其视为外键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2016-08-13
  • 2014-10-16
  • 2021-06-12
  • 2014-08-27
  • 1970-01-01
相关资源
最近更新 更多