Я пытаюсь сохранить пользователя, его профиль и некоторые теги, а также мою таблицу соединений, которая связывает профиль и теги, все портится.
Модель профиля называется Instructor, модель тегов называется Subject. У Инструктора есть номер телефона и почтовый индекс, и по какой-то причине CakePHP считает, что эти поля следует использовать при создании записей в моей таблице присоединения.
Моя таблица присоединения всегда выглядит как:
id | instructor_id | subject_id |
1 | 90210 | 1 | // thinks that the zip code is an instructor_id
2 | 1112223333 | 1 | // thinks that the phone number is an instructor_id
3 | 1 | 1 | // thinks that user_id is an instructor_id
4 | 1 | 1 | // the actual instructor_id, this one's correct
5 | 90210 | 2 |
6 | 1112223333 | 2 |
3 | 1 | 2 |
4 | 1 | 2 |
Мои модели:
class Instructor extends AppModel
{
var $name = 'Instructor';
var $belongsTo = array('User', 'State');
var $hasAndBelongsToMany = array(
'Subject' => array(
'className' => 'Subject',
'joinTable' => 'instructors_subjects',
'foreignKey' => 'instructor_id',
'associationForeignKey' => 'subject_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
}
class Subject extends AppModel
{
var $name = 'Subject';
var $hasAndBelongsToMany = array(
'Instructor' => array(
'className' => 'Instructor',
'joinTable' => 'instructors_subjects',
'foreignKey' => 'subject_id',
'associationForeignKey' => 'instructor_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
}
Мои модельные ассоциации:
User hasOne Instructor
Instructor belongsTo User
Instructor hasAndBelongsToMany Subject
Subject hasAndBelongsToMany Instructor
Данные моей формы выглядят так:
Array
(
[User] => Array
(
[username] => MrInstructor
[password] => cddb06c93c72f34eb9408610529a34645c29c55d
[group_id] => 2
)
[Instructor] => Array
(
[name] => Jimmy Bob
[email] => jbob@gmail.com
[phone] => 1112223333
[city] => Beverly Hills
[zip_code] => 90210
[states] => 5
[website] => www.jimmybobbaseballschool.com
[description] => Jimmy Bob is an instructor.
[user_id] => 1
[id] => 1
)
[Subject] => Array
(
[name] => hitting, pitching
)
)
Моя функция для обработки формы выглядит так:
function instructor_register()
{
$this->set('groups', $this->User->Group->find('list'));
$this->set('states', $this->User->Instructor->State->find('list'));
if (!empty($this->data)) {
// Set the group to Instructor
$this->data['User']['group_id'] = 2;
// Save the user data
$user = $this->User->save($this->data, true, array(
'username',
'password',
'group_id'
));
// If the user was saved, save the instructor's info
if (!empty($user)) {
$this->data['Instructor']['user_id'] = $this->User->id;
$instructor = $this->User->Instructor->save($this->data, true, array(
'user_id',
'name',
'email',
'phone',
'city',
'zip_code',
'state_id',
'website',
'description'
));
// If the instructor was saved, save the rest
if(!empty($instructor)) {
$instructorId = $this->User->Instructor->id;
$this->data['Instructor']['id'] = $instructorId;
// Save each subject seperately
$subjects = explode(",", $this->data['Subject']['name']);
foreach ($subjects as $_subject) {
// Get the correct subject format
$_subject = strtolower(trim($_subject));
$this->User->Instructor->Subject->create($this->data);
$this->User->Instructor->Subject->set(array(
'name' => $_subject
));
$this->User->Instructor->Subject->save();
echo '<pre>';
print_r($this->data);
echo '
';
}
}
}
}
}