我正在尝试保存用户、他们的个人资料和一些标签,以及链接个人资料和标签的连接表。
概要模型称为 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); 回声''; } } } } }