我是CakePHP的新手,使用CakePHP 2.5.1和MySQL开发 Cloud 应用程序 . 我有以下表格:
users
user_id ,
people_id(FK- people.people_id),
username,
password
people
people_id,
manager_id(FK- people.people_id),
firsr_name,
last_name,
roles
role_id ,
people_id (FK- people.people_id),
role
addresses
address_id,
people_id (FK- people.people_id),
street,
house no,
post code,
city
外键 people.manager_id
指的是primary_key people.people_id
. 字段 roles.role
可以包含 'manager'
或 'customer'
.
现在,在我的注册表单中,将有以下输入字段:
-username
-password
-first name
-last name
-street
-house no
-post code
-city
-role
我使用了User模型(User.php),注册表单(add.ctp)和控制器(UsersController.php)来输入用户名和密码;并实施登录,注销 .
查看 add.ctp :
<div class="users form">
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend><?php echo __('Registrierung'); ?></legend>
<?php echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('password_confirm', array('label' => 'Confirm Password', 'maxLength' => 255, 'title' => 'Confirm password', 'type'=>'password'));
);
?>
</fieldset>
<?php echo $this->Form->end(__('Register')); ?>
</div>
工作正常 . 现在我需要在注册表单中包含上面的输入字段 . 这意味着为每个表创建模型并在我的 User
模型中定义 belogsTo
, hasMany
等关联,我已经定义了以下关联:
class User extends AppModel {
public $belongsTo = array(
'Person' => array(
'className' => 'Person',
'foreignKey' => 'people_id'
)
);
}
但是,它会引发以下错误:
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Person.id' in 'on clause'
谁能告诉我如何实现这些关联?我找不到符合我要求的任何例子 .
2 回答
MySQL错误是由您命名主键的方式引起的 . 在CakePHP中,主键应命名为
id
.如果您希望使用其他名称(不推荐),您必须告诉CakePHP您将使用的名称 . 这样做声明了
$primaryKey
属性 . 例:但是,最好重命名主键并尽可能遵守CakePHP约定 .
此外,通过CakePHP处理复数的方式,您的
people_id
字段应重命名为person_id
.EDIT: Adding relationships
您的关系如下 .
Your Person class:
Your other classes:
请记住将所有外键从
people_id
更改为person_id
.Modification in model Role
我想你可能想把字段
roles.person_id
移到people.role_id
. 恕我直言,这更有意义 .您的关系将变为:
和
看到
您可以在每个模型中明确定义主键,但这会使它变得非常复杂 .
我建议你坚持惯例 . 请将所有主键字段更改为“id” . 这可能会解决你的大部分问题 .
和平!的xD