Я пытаюсь создать систему приглашений с CakePHP. У меня есть модель приглашения, которая имеет много людей, а Person имеет одно и принадлежит для приглашения. Я считаю, что отношения работают, так как мое представление индекса приглашения может правильно обращаться и отображать связанных людей через модель приглашения. Но Вот что правила отношений похожи:Сохранение нескольких моделей в CakePHP с помощью saveAll()
class Invitation extends AppModel {
var $name = 'Invitation';
var $hasMany = array(
'People' => array(
'className' => 'Person',
'foreignKey' => 'invitation_id',
'dependent'=> true
)
);
...
}
class Person extends AppModel {
var $name = 'Person';
var $hasOne = 'Invitation';
var $belongsTo = 'Invitation';
...
}
скорректированной модель зависимости:
class Invitation extends AppModel {
var $name = 'Invitation';
var $hasMany = array('Person');
...
}
class Person extends AppModel {
var $name = 'Person';
var $belongsTo = array('Invitation');
...
}
В моем Приглашении добавить функцию, однако, у меня возникла проблемы сохранения данных для новых людей. Я хочу одновременно добавить одно приглашение и два человека.
Heres моя добавить функцию:
function add() {
$this->autoRender = false;
if($this->RequestHandler->isAjax()) {
$this->layout = 'ajax';
if(!empty($this->data)) {
$this->Invitation->create();
if($this->Invitation->saveAll($this->data)) {
//debug($this->data);
$this->Session->setFlash('Saved');
$this->redirect('invitations/add_invitations');
} else {
echo('Didnt save<br />');
}
}
}
}
Вот результат моей отладки ($ this-> данные):
Array
(
[Invitation] => Array
(
[code] => 001
[password] => 85c8a3735499bf91d25e5960ab4ed9deeb0b457e
[type] => 1
[num_people] => 2
)
[Person] => Array
(
[0] => Array
(
[fname] => Jane
[lname] => Doe
)
[1] => Array
(
[fname] => John
[lname] => Doe
)
)
)
я не получаю никаких ошибок. данные приглашения сохраняются должным образом, но люди - нет.
ОБНОВЛЕНИЕ: Я, наконец, получил эту работу с вышеупомянутыми обновленными отношениями модели. Очевидно, что hasOne & принадлежит к правилам в модели Person, которые противоречивы. После этого я допустил ошибку (неловкую), которая препятствовала сохранению связанной с ней модели Person:
В модели приглашения я hade $ hasMany = array ('People'); когда это должно было быть $ hasMany = array ('Person').
Мне также пришлось изменить конфигурацию моей базы данных, чтобы использовать InnoDB по умолчанию, так что это, безусловно, необходимое исправление.
Я думаю, что ваши лица не проходят проверки. У вас есть таблица «людей»? – bancer
Попробуйте 'debug ($ this-> Invitation-> invalidFields()) после операции сохранения. – deceze
У меня, конечно, есть таблица «people» с полем приглашения. Отладка, как указано выше, выводит пустой массив, поэтому я предполагаю, что это означает, что данные проверяются. –