может сохранять только последнюю запись в массиве cakephp3

#php #cakephp

#php #cakephp

Вопрос:

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

Происходит то, что я сохраняю последнюю запись только из примерно 7 записей, поэтому она сохраняется, но только один раз. Я сохраняю только в 1 таблице без ассоциаций. Без вывода ошибок я не знаю, что делать

  $alltimesheetLessons = $this->TimesheetLessons->newEntities( $timesheetLesson, ['validate' =>  false]);


                foreach ( $alltimesheetLessons as $key => $entity) {
               // debug($entity->toArray());
                  $this->TimesheetLessons->save($entity, ['atomic' =>  false]);

                }//for 
  

// вот пример из 2 записей

 'tutor_id' => (int) 12,
'subject_id' => (int) 16,
'lesson_plan' => 'q1)Evidence:',
'lesson_date' => object(CakeI18nFrozenDate) {

    'time' => '2016-09-20T00:00:00 00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false

},
'period_start_date' => object(CakeI18nFrozenDate) {

    'time' => '2016-09-19T00:00:00 00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false

},
'period_end_date' => object(CakeI18nFrozenDate) {

    'time' => '2016-10-02T00:00:00 00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false

},
'lesson_id' => (int) 18913,
'submit_date' => '2016-10-02',
'invoice' => '49',
'term_id' => (int) 0,
'start_time' => '10:00 ',
'end_time' => '11:00 ',
'student_name' => 'jjde',
'class_year' => (int) 8,
'subjectname' => 'Maths: Year 7 - 10',
'makeup_lesson' => false,
'makeup_lesson_expired' => false,
'makeup_expiry_date' => null,
'lesson_inactive' => false,
'cancelled_by' => '',
'schedule_rec' => false,
'forefit' => (int) 0,
'cancelled_date' => null,
'tutoring_type_id' => (int) 1,
'payrate' => (float) 20,
'lesson_duration' => (float) 1,
'amount' => (float) 20
  

]

  srcControllerLessonsController.php (line 2590)

[
    'tutor_id' => (int) 12,
    'subject_id' => (int) 16,
    'lesson_plan' => 'q1)EvidimplestvformHomeWork:',
    'lesson_date' => object(CakeI18nFrozenDate) {

        'time' => '2016-09-20T00:00:00 00:00',
        'timezone' => 'UTC',
        'fixedNowTime' => false

    },
    'period_start_date' => object(CakeI18nFrozenDate) {

        'time' => '2016-09-19T00:00:00 00:00',
        'timezone' => 'UTC',
        'fixedNowTime' => false

    },
    'period_end_date' => object(CakeI18nFrozenDate) {

        'time' => '2016-10-02T00:00:00 00:00',
        'timezone' => 'UTC',
        'fixedNowTime' => false

    },
    'lesson_id' => (int) 18914,
    'submit_date' => '2016-10-02',
    'invoice' => '49',
    'term_id' => (int) 0,
    'start_time' => '11:00 ',
    'end_time' => '12:00 ',
    'student_name' => 'Jhj',
    'class_year' => (int) 8,
    'subjectname' => 'Maths: Year 7 - 10',
    'makeup_lesson' => false,
    'makeup_lesson_expired' => false,
    'makeup_expiry_date' => null,
    'lesson_inactive' => false,
    'cancelled_by' => '',
    'schedule_rec' => false,
    'forefit' => (int) 0,
    'cancelled_date' => null,
    'tutoring_type_id' => (int) 1,
    'payrate' => (float) 20,
    'lesson_duration' => (float) 1,
    'amount' => (float) 20
]

 foreach ($data as  $key => $item):



                $timesheetLesson[$key]['tutor_id']=$item['tutor_id'];
                $timesheetLesson[$key]['subject_id']=$item['subject_id'];
                $timesheetLesson[$key]['lesson_plan']=$item['lesson_plan'];
                $timesheetLesson[$key]['lesson_date']=date('Y-m-d', strtotime($item['lesson_date']));
                $timesheetLesson[$key]['period_start_date']=date('Y-m-d', strtotime($startdate));
                $timesheetLesson[$key]['period_end_date']=date('Y-m-d', strtotime($enddate));

                $timesheetLesson[$key]['lesson_id']=$item['id'];
                $timesheetLesson[$key]['submit_date'] = date('Y-m-d');
                $timesheetLesson[$key]['invoice']=$invoice;

                $timesheetLesson[$key]['term_id']=$item['term_id'];
                $timesheetLesson[$key]['start_time']=date('h:i ', strtotime($item['start_time']));
                $timesheetLesson[$key]['end_time']=date('h:i ', strtotime($item['end_time']));


              endforeach;
  

Комментарии:

1. Пожалуйста pr($this->request->data) , сначала. Кроме того, вам нужно показать код вашего шаблона, в котором вы написали помощник формы.

2. нет $this->request-> data, поскольку я создаю данные в контроллере. я не использую данные формы

3. Хорошо, но должен быть массив. Я думаю, что массив есть $timesheetLesson . Пожалуйста, поделитесь структурой этого массива.

Ответ №1:

$result = будет перезаписываться на каждой итерации массива; оставляя его заполненным последним в цикле. Для создания нового массива вы можете использовать:

 $result[] =
  

который будет заполнять массив $result каждым.

Комментарии:

1. нет, это не работает. если я избавлюсь от результата, он все равно будет работать. я обновлю OP

2. посмотрите на OP сейчас, поскольку в нем есть только команда сохранения и нет $result, но он по-прежнему сохраняет только последнюю запись

3. хорошо, теперь я в панике, так как мне нужно, чтобы это работало сегодня, и без возможности обнаружить какие-либо ошибки, я не знаю, что делать!

Ответ №2:

Вам нужно перенести результаты в массив $result . Вот так:

 $result[] = ...;
       ^^
  

Или это:

 array_push($result, $value_pushed);
  

Комментарии:

1. забудьте $result , я его удалил. Он сохраняет только последнюю запись.

2. итак, в какую переменную вы сохранили последнюю запись?

3. Я обновлю сообщение выше, чтобы показать, как я ввел данные. В нижней части OP вы можете увидеть это. Результат — 7 записей

Ответ №3:

Я обнаружил ошибку в том, что существует правило сборки, которое останавливает ввод 0 для вводимого поля. Даже если validate равно false, buildrule все еще активен