CakePHP 2.8 saveAll создает две записи вместо одной - PullRequest
0 голосов
/ 04 января 2019

Я клонирую запись вехи со связанными данными. Сначала я нахожу данные из исходной вехи, затем меняю содержимое массива и удаляю все поля 'id'. Затем я пытаюсь «сохранить все». Все связанные данные создаются правильно, но в таблице «вехи» теперь есть 2 новые записи вместо 1. Вторая запись содержит идентификатор, используемый ассоциированными данными, так почему же первая запись вообще существует?

Данные (упрощенно) и вызов:

    $test = array(
        'Milestone' => array(
            'name' => 'Clone Test',
            'customer_status' => '',
            'time_to_complete' => '1',
            'is_active' => true,
        ),
        'MilestoneAlert' => array(
            (int) 0 => array(
                'name' => 'Clone Test',
                'type' => 'customer',
                'milestone_alert_type_id' => '0',
                'email' => null,
                'subject' => 'First alert!',
                'message' => 'Add a message',
                'recipient_name' => '',
                'is_active' => true,
            ),
            (int) 1 => array(
                'name' => 'Clone Test 1',
                'type' => 'customer',
                'milestone_alert_type_id' => '0',
                'email' => null,
                'subject' => 'Second alert!',
                'message' => 'Add a message',
                'recipient_name' => '',
                'is_active' => true,
            )
        ),
        'MilestoneCondition' => array(
            (int) 0 => array(
                'name' => 'Clone Test',
                'condition' => 'First condition.',
                'is_active' => true,
            ),
            (int) 1 => array(
                'name' => 'Clone Test 1',
                'condition' => 'Second condition.',
                'is_active' => true,
            )
        )
    );
    $this->loadModel('Milestone');
    $this->Milestone->create();
    $this->Milestone->saveAll($test);

В Model / Milestone.php:

public $hasMany = array(
    'MilestoneAlert' => array(
        'className' => 'MilestoneAlert',
        'foreignKey' => 'milestone_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),
    'MilestoneCondition' => array(
        'className' => 'MilestoneCondition',
        'foreignKey' => 'milestone_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => 'MilestoneCondition.order',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

В Model / MilestoneAlert.php:

public $belongsTo = array(
    'Milestone' => array(
        'className' => 'Milestone',
        'foreignKey' => 'milestone_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

В Model / MilestoneCondition.php:

public $belongsTo = array(
    'Milestone' => array(
        'className' => 'Milestone',
        'foreignKey' => 'milestone_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

После запуска метода есть две записи в «milestone_conditions», две записи в «milestone_alerts» и две идентичные записи в «вехах». Как мне предотвратить создание двух «веховых» записей?

1 Ответ

0 голосов
/ 18 января 2019

Попробуйте получить исходные данные следующим образом:

$test= $this->Milestone->findById('insert your id');
$this->Milestone->create(); // Create a new record
$this->Milestone->saveAll($test,array('deep' => true)); // And save it
...