cakephp列映射

时间:2011-01-25 15:13:54

标签: cakephp

我刚刚开始使用CakePHP,所以我是一个完整的新手,在这个框架中工作,并采用了一个非常糟糕的数据库结构的遗留系统。我进去并将主键添加到没有它们的表中。但是,我找不到有关在模型中映射列的位置的信息,并且可以使用一些链接以便我可以在此区域中进行定向。我从他们的用户表开始,它已被命名为“system”。我创建了一个名为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-&gt访问id ; User-> id而不是像$ this-> User-> user_id这样的东西,并且与命名约定更加一致,代码更容易理解。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)