Попытка saveall () в две отдельные таблицы с несколькими записями - PullRequest
1 голос
/ 27 апреля 2011

Привет всем. Кажется, я не могу заставить эту чертову функцию saveall() работать. Я сказал, что это волшебно, но у меня не должно быть достаточно мидихлорианов или чего-то другого, что нужно, чтобы зажечь его.

Итак, у меня есть четыре разные таблицы - Вопросы, Комментарии, Сотрудники и Ответы. Вопросы имеют много ответов, и ответы имеют один комментарий. Ответы принадлежат сотрудникам. Вот что настроено в моих моделях:

Модель ответа

var $hasOne = array(
    'Comment' => array(
        'className' => 'Comment',
        'foreignKey' => 'answer_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

var $belongsTo = array(
    'Question' => array(
        'className' => 'Question',
        'foreignKey' => 'question_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Employee' => array(
        'className' => 'Employee',
        'foreignKey' => 'employee_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

Комментарий модели

var $validate = array(
    'answer_id' => array(
        'numeric' => array(
            'rule' => array('numeric'),
        ),
    ),
);

var $belongsTo = array(
    'Answer' => array(
        'className' => 'Answer',
        'foreignKey' => 'answer_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

Когда я запускаю saveall() для своих данных, я получаю сообщение о том, что мой answer_id для моих комментариев не является числовым. Вот как настроено мое дерево данных, которое я пытаюсь сохранить (используя $this->Answer->saveall($this->data);:

[Answer] => Array
        (
            [1] => Array
                (
                    [question_id] => 1
                    [employee_id] => 14
                    [result] => 7
                    [unique_hash] => t9279kn7vh
                )

            [3] => Array
                (
                    [question_id] => 3
                    [employee_id] => 14
                    [result] => 6
                    [unique_hash] => t9279kn7vh
                )

            [4] => Array
                (
                    [question_id] => 4
                    [employee_id] => 14
                    [result] => 3
                    [unique_hash] => t9279kn7vh
                )

            [5] => Array
                (
                    [question_id] => 5
                    [employee_id] => 14
                    [result] => 2
                    [unique_hash] => t9279kn7vh
                )

            [6] => Array
                (
                    [question_id] => 6
                    [employee_id] => 14
                    [result] => 7
                    [unique_hash] => t9279kn7vh
                )

        )

    [Comment] => Array
        (
            [1] => Array
                (
                    [user_id] => 14
                    [text] => test1
                )

            [3] => Array
                (
                    [user_id] => 14
                    [text] => test2
                )

            [4] => Array
                (
                    [user_id] => 14
                    [text] => test3
                )

            [5] => Array
                (
                    [user_id] => 14
                    [text] => test4
                )

            [6] => Array
                (
                    [user_id] => 14
                    [text] => test5
                )

        )

Может кто-нибудь помочь мне понять, что здесь не так? Я ценю помощь.

РЕДАКТИРОВАТЬ : я обновил массив $ data, чтобы его ключи начинались с нуля с шагом в 1 (т. Е. array(0=>array(),1=>array(),2=>array()); и т. Д.), И это устранило ошибку проверки, но данные все еще не сохраняются.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

SaveAll просто не сохраняет другие связанные таблицы.Мы делаем именно то, что вы сказали, мы определяем их сами, мы даже связываем идентификаторы вручную.Это своего рода боль, но это лучший вариант.

1 голос
/ 27 апреля 2011

попробуйте это:

$this->Answer->saveall($this->data['Answer']);
$this->Comment->saveall($this->data['Comment']);

по какой-то причине, CakePHP иногда не сохраняет автоматически все записи связанных таблиц, даже если вы определили их отношения.Я все еще пытаюсь понять, почему.

...