これは、ファイルを取得して各行をループするストア メソッドです。
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');
}
私のリポジトリでは、私の create メソッドは次のようになります。
public function create(array $data)
{
// Create the model
$model = $this->model->fill($data);
if ($model->save()) {
return $model;
}
return false;
}
さて、6行をインポートすると何が起こっているように見えますが、実際には最終行だけがDBに挿入されています。
create メソッドで 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
各 ID がすべて no であることに注意してください。8 (テーブルで次に使用可能な行)。テーブルIDはデフォルトのAUTO INCREMENTなどなので問題はありません。論理的な問題だと思いますか? 何か案は?