Вставка импорта Laravel CSV с тем же идентификатором (простой импорт)

Это мой метод хранилища, который захватывает файл и перебирает каждую из строк:

public function store()
    {
        $input = Input::file('statuses');
        $filename = $input->getRealPath();
        $i = 0;

        $rows = Excel::load($filename, null, 'ISO-8859-1')->get()->toArray();

        foreach($rows as $k => $row)
        {
            if(!isset($err)) {
                if (!$this->repository->create($row))
                    $err = 'Error importing row ' + $i;
                    $i++;
                }
        }

        if(isset($err)) {
            Flash::error($err);
            return Redirect::route('admin.importstatus.index');
        }

        Flash::success('Statuses Imported!');
        return Redirect::route('admin.statuses.index');
    }

В моем репозитории мой метод создания выглядит так:

public function create(array $data)
{
    // Create the model
    $model = $this->model->fill($data);

    if ($model->save()) {
        return $model;
    }

    return false;
}

Теперь то, что происходит, когда я импортирую 6 строк, только последний фактически вставляется в БД.

Если я var_dump в своем методе создания, мне возвращается следующее:

    array (size=7)
  'content' => string 'Imported two' (length=12)
  'status' => float 0
  'user_id' => float 1
  'pinned' => float 0
  'updated_at' => string '2015-06-28 16:13:22' (length=19)
  'created_at' => string '2015-06-28 16:13:22' (length=19)
  'id' => int 8
array (size=7)
  'content' => string 'Imported three' (length=14)
  'status' => float 0
  'user_id' => float 1
  'pinned' => float 0
  'updated_at' => string '2015-06-28 16:13:22' (length=19)
  'created_at' => string '2015-06-28 16:13:22' (length=19)
  'id' => int 8
array (size=7)
  'content' => string 'Imported four' (length=13)
  'status' => float 0
  'user_id' => float 1
  'pinned' => float 0
  'updated_at' => string '2015-06-28 16:13:22' (length=19)
  'created_at' => string '2015-06-28 16:13:22' (length=19)
  'id' => int 8

Обратите внимание, что каждый из идентификаторов имеет значение no. 8 (Следующая доступная строка в таблице). Идентификатор таблицы - это defo AUTO INCREMENT и т. Д., Так что проблем нет, я думаю, это логическая проблема? Любые идеи?


person ChrisBratherton    schedule 28.06.2015    source источник


Ответы (1)


Похоже, вы используете один и тот же экземпляр модели снова и снова.

Попробуйте изменить fill():

$this->model->fill($data);

с созданием():

$this->model->create($data);

С fill() вы только заполняете уже созданный экземпляр модели некоторыми данными. Но если вы используете create(), вы сначала создаете новый экземпляр (с новым идентификатором), затем заполняете его данными, а затем сохраняете.

Важный

При использовании create() вы также сохраняете его в базе данных, что означает, что вам не нужно сохранять() его вручную.

person user2479930    schedule 28.06.2015
comment
Идеальный! Как/почему они отличаются? Будет ли замена их на out иметь какие-либо последствия с точки зрения простого приложения CRUD? - person ChrisBratherton; 28.06.2015