我刚刚开始使用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这样的东西,并且与命名约定更加一致,代码更容易理解。
此表还将用于确定用户可以访问的菜单选项以及用户可以访问的页面。我稍后会处理。
答案 0 :(得分:3)
我会看看virtual fields。您的模型属性初始化可能如下所示:
var virtualFields = array (
'UserType' => 's_rec_type',
'UserName' => 's_user_id',
'Initials' => 's_init',
.....
'Modified' => 'modified'
);
答案 1 :(得分:0)