我正在尝试保存用户、他们的个人资料和一些标签,以及链接个人资料和标签的连接表。
概要模型称为 Instructor,标签模型称为 Subject。讲师有一个电话号码和一个邮政编码,出于某种原因,CakePHP 认为这些是在我的联接表中创建条目时应该使用的字段。
我的加入表总是出现:
编号 | 讲师 ID | 主题ID | 1 | 90210 | 1 | // 认为邮政编码是instructor_id 2 | 1112223333 | 1 | // 认为电话号码是instructor_id 3 | 1 | 1 | // 认为user_id 是instructor_id 4 | 1 | 1 | // 实际的instructor_id,这个是正确的 5 | 90210 | 2 | 6 | 1112223333 | 2 | 3 | 1 | 2 | 4 | 1 | 2 |
我的模型:
类 Instructor 扩展 AppModel
{
var $name = '教师';
var $belongsTo = array('User', 'State');
var $hasAndBelongsToMany = 数组(
'主题' => 数组(
'className' => '主题',
'joinTable' => 'instructors_subjects',
'foreignKey' => 'instructor_id',
'associationForeignKey' => 'subject_id',
'独特' => 真的,
'条件' => '',
'字段' => '',
'订单' => '',
'限制' => '',
'偏移' => '',
'finderQuery' => '',
'deleteQuery' => '',
'插入查询' => ''
)
);
}
类 Subject 扩展 AppModel
{
var $name = '主题';
var $hasAndBelongsToMany = 数组(
'教练' => 数组(
'className' => '导师',
'joinTable' => 'instructors_subjects',
'foreignKey' => 'subject_id',
'associationForeignKey' => 'instructor_id',
'独特' => 真的,
'条件' => '',
'字段' => '',
'订单' => '',
'限制' => '',
'偏移' => '',
'finderQuery' => '',
'deleteQuery' => '',
'插入查询' => ''
)
);
}
我的模型协会:
用户拥有一位讲师 教师属于用户 讲师 hasAndBelongsToMany Subject 主题 hasAndBelongsToMany Instructor
我的表单数据如下所示:
大批
(
[用户] => 数组
(
[用户名] => MrInstructor
[密码] => cddb06c93c72f34eb9408610529a34645c29c55d
[group_id] => 2
)
[讲师] => 数组
(
[名称] => 吉米鲍勃
[电子邮件] => jbob@gmail.com
[电话] => 1112223333
[城市] => 比佛利山庄
[邮编] => 90210
[状态] => 5
[网站] => www.jimmybobbaseballschool.com
[描述] => Jimmy Bob 是一名讲师。
[user_id] => 1
[id] => 1
)
[主题] => 数组
(
[名称] => 击球、投球
)
)
我处理表单的函数如下所示:
功能指导员注册()
{
$this->set('groups', $this->User->Group->find('list'));
$this->set('states', $this->User->Instructor->State->find('list'));
if (!empty($this->data)) {
// 将组设置为 Instructor
$this->data['User']['group_id'] = 2;
// 保存用户数据
$user = $this->User->save($this->data, true, array(
'用户名',
'密码',
'group_id'
));
// 如果用户已保存,则保存教师信息
if (!empty($user)) {
$this->data['Instructor']['user_id'] = $this->User->id;
$instructor = $this->User->Instructor->save($this->data, true, array(
'用户身份',
'姓名',
'电子邮件',
'电话',
'城市',
'邮政编码',
'state_id',
'网站',
'描述'
));
// 如果保存了教练,则保存其余的
if(!empty($instructor)) {
$instructorId = $this->User->Instructor->id;
$this->data['Instructor']['id'] = $instructorId;
// 分别保存每个主题
$subjects = explode(",", $this->data['Subject']['name']);
foreach ($subjects 作为 $_subject) {
// 获取正确的主题格式
$_subject = strtolower(trim($_subject));
$this->User->Instructor->Subject->create($this->data);
$this->User->Instructor->Subject->set(array(
'名称' => $_subject
));
$this->User->Instructor->Subject->save();
回声'';
print_r($this->data);
回声'';
}
}
}
}
}