Я много искал, но ничего похожего на то, что я ищу.Как связать несколько записей одновременно с помощью cakephp hasMany?
То, что я пытаюсь сделать, - это связать одну запись «Пользователь» с другими несколькими записями «Карты» сразу с помощью несколько списков HTML.
Таблицы: пользователей (номер, имя, имя пользователя) карты (номер, user_id)
Модели:
class User extends AppModel {
public $name = 'User';
public $hasMany = array('Card');}
class Card extends AppModel {
public $name = 'Card';
public $belongsTo = array('User');}
вид edit.ctp Пользователь
echo $this->Form->input('id');
echo $this->Form->input('Card', array('multiple'=>true));
Как мой контроллер будет выглядеть? В настоящее время это выглядит так, но не спасает ничего, кроме записи пользователя «без соответствующих карт»
if (!empty($this->data)) {
foreach($this->data['User']['Card'] as $key => $item){
$this->data['User']['Card'][$key] = array('id'=>$item, 'user_id'=>$this->data['User']['id']);
}
if ($this->User->saveAll($this->data)) {
//$this->User->Card->saveAll($this->data);
$this->Session->setFlash(__('The user has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
}
}
if (empty($this->data)) {
$this->data = $this->User->read(null, $id);
$this->set('cards', $this->User->Card->find('list'));
}
$ this-> Данные содержит:
Array
(
[User] => Array
(
[id] => 1
[name] => Superman
[status] => 1
[Card] => Array
(
[0] => Array
(
[id] => 11402130001
[user_id] => 1
)
[1] => Array
(
[id] => 11402130002
[user_id] => 1
)
[2] => Array
(
[id] => 11402130003
[user_id] => 1
)
[3] => Array
(
[id] => 11402130004
[user_id] => 1
)
)
)
)
Спасибо G.J, но это не сработает! Я пробовал это раньше, но он не сохраняет user_id какую-либо идею, в чем проблема? Я использую 1.3.4 – mmahgoub
@mmahgoub, что, если вы поместите массив Card вне массива User? Я не уверен, что он все равно сработает. Если этого не произойдет, возможно, вам стоит попытаться изменить способ своей работы, пытаясь сохранить Карты вместо Пользователя. Скажите, если это сработает. –
Привет, GJ на самом деле это работает, если это так: 'if ($ this-> User-> saveAll ($ this-> data ['User'])) { $ this-> Session-> setFlash (__ (' Пользователь был сохранен ', true));} ', но возникает другая проблема! CakePHP не распознает невыбранные элементы, другими словами, он может связывать карты с пользователем, когда я их выбираю, но не отключается, когда я удаляю выделение! любая идея, как добиться этого без цикла foreach и saveField и такого рода вещей? – mmahgoub