Очистить состояние модели при сохранении нового элемента

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

public function uploadsaveshows() {
    // An array of headers that will need to be entered into a separate array to allow entry as JSON
    $detail_headers = array(
            'legal_entity',
            'incorp_num',
            'ACN',
            'url',
            'physical_street_1',
            'physical_street_2',
            'physical_town',
            'physical_state',
            'physical_postcode',
            'start_date',
            'agm_date',
            'royal',
            'stamp_duty_exempt',
            'stamp_duty_expiry',
            'insurance_expiry',
            'supp_events'
    );

    $app   = JFactory::getApplication();
    $lang  = JFactory::getLanguage();
    $model = $this->getModel();

    date_default_timezone_set('Australia/Sydney');

    $path = JPATH_COMPONENT . '/controllers/showdata.csv';

    //Load the file and pass each line into an array.
    $rows = array_map('str_getcsv', file($path));
    //Take out the first line as it is the headers.
    $header = array_shift($rows);

    //turn each of the arrays into an entry
    foreach ($rows as $row) {           
        $show = array_combine($header, $row);
        $show['first_date_start'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['first_date_start'])));
        $show['first_date_finish'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['first_date_finish'])));
        $show['second_date_start'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['second_date_start'])));
        $show['second_date_finish'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['second_date_finish'])));
        $show['third_date_start'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['third_date_start'])));
        $show['third_date_finish'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['third_date_finish'])));
        $show['start_date'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['start_date'])));
        $show['agm_date'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['agm_date'])));
        $show['insurance_expiry'] =  date('Y-m-d H:i:s',strtotime(str_replace('/', '-', $show['insurance_expiry'])));

        foreach ($show as $keys => $value) {
            //separate each of the entries that need to be entered into an array to be stored as JSON
            if(in_array($keys, $detail_headers)){
                $details[$keys]= $value;
                unset($show[$keys]);
            }
        }

        $show['details'] = $details;

        //Save each one
        if (!$model->save($show))
        {

            return false;

        }

    }

        // Redirect to the list screen.
        $this->setRedirect(
                JRoute::_(
                        'index.php?option=' . $this->option . '&view=' . $this->view_list
                        . $this->getRedirectToListAppend(), false
                )
        );
}
1 голос | спросил Lee Wiggins 18 Mayam15 2015, 05:06:48

1 ответ


1

Существует два метода.

Передайте идентификатор в данных

$show['id'] = 0;

Попробуйте получить состояние и установите id равным 0.

$state = $model->getState();
$state->set($model->getName().'.id', 0);
if(!$model->save($show)){
...
}
ответил Nagarjun 18 Mayam15 2015, 05:31:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132