Как связать несколько записей одновременно с помощью cakephp hasMany? - PullRequest
1 голос
/ 14 января 2012

Я много гуглил, но, похоже, ничто не похоже на то, что я ищу ..

Я пытаюсь связать одну запись "Пользователь" с другими несколькими записями "Карты" водин раз с использованием нескольких списков HTML.

Таблицы: карточки пользователей (идентификатор, имя, имя пользователя) (идентификатор, идентификатор пользователя)

Модели:

class User extends AppModel {
    public $name = 'User';
    public $hasMany = array('Card');}

class Card extends AppModel {    
    public $name = 'Card';
    public $belongsTo = array('User');}

Редактирование пользователя.ctp view

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-> data содержит:

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
            )
        )
    )
)

1 Ответ

0 голосов
/ 15 января 2012

Вам нужно добавить запись user_id для ваших карт, чтобы ваши данные выглядели примерно так:

Array
(
    [User] => Array
        (
            [id] => 10
        )
    [Card] => Array
        (
            [0] => Array
                (
                [id] => 1
                [user_id] => 10
                )
            [1] => Array
                (
                [id] => 2
                [user_id] => 10
                )

        )
)

Я бы пошел на цикл foreach на карте $ this-> data ['] array:

foreach ($this->data['Card'] as &$card) {
  $card['user_id'] = $this->data['User']['id'];
}

Затем вы можете сделать saveAll.Кстати, $ this-> User-> Card-> saveAll ($ this-> data) следует удалить.

...