#excel #laravel #import
Вопрос:
почему при импорте excel мои добавленные данные не сохраняются в базе данных ? я импортирую excel с типом xlsx
Мой контроллер
public function importDataPegawai(Request $request) { Excel::import(new ImportPegawai, $request-gt;file('upload-pegawai')); return redirect('dashboard-admin')-gt;with('success','Berhasil Upload Data Pegawai'); }
Мой Импорт
lt;?php namespace AppImports; use AppModelsPegawaiModel; use MaatwebsiteExcelConcernsToModel; use MaatwebsiteExcelConcernsWithStartRow; use Auth; use DB; class ImportPegawai implements ToModel, WithStartRow { /** * @param array $row * * @return IlluminateDatabaseEloquentModel|null */ public function model(array $row) { foreach ($row as $data){ $data = DB::table('tbl_pegawai')-gt;where('nip', $row[0])-gt;get(); if (empty($data)) { return new PegawaiModel([ 'nip' =gt; $row[0], 'nama_lengkap' =gt; $row[1], 'pangkat' =gt; $row[2], 'gol' =gt; $row[3], 'jabatan' =gt; $row[4], 'unit_kerja' =gt; $row[5] ]); } } } public function startRow(): int { return 3; } }
Когда я dd($data), результат выглядит так
я получил данные из своей загрузки в Excel.
В чем проблема ? почему мои данные не могут быть сохранены в базе данных
Ответ №1:
Этот код вернет an Collection
, то есть object
объекты an всегда не пусты.
DB::table('tbl_pegawai')-gt;where('nip', $row[0])-gt;get();
Если вы переключитесь на first()
него , он вернет model
или null
, эффективно выполняя то, что вы намеревались.
DB::table('tbl_pegawai')-gt;where('nip', $row[0])-gt;first();
Комментарии:
1. похоже, это не работает, теперь я не могу получить значение данных в Excel, значения (?, ?, ?, ?, ?, ?))
2. Я попытался использовать dd($row[0]) и получил значение, но почему, когда я использую ‘nip’ =gt; $row[0]. Я не могу понять значение
3. Вы установили поля, которые вы заполняете, как $заполняемые в модели?
Ответ №2:
Я уже бывал в такой ситуации раньше и понял, что это может быть вызвано разными факторами. Возможно, вы захотите попробовать следующее:
- Сначала сохраните файл, который вы собираетесь загрузить, в
Excel 97-2003 Workbook
формат. - Убедитесь, что столбцы, в которые вы вставляете данные, включены в
protected $fillable
разделAppPegawaiModel
. - Если определенные ячейки в вашей электронной таблице пусты, выполните для них проверку.
Экс.
if ($row[0] === null) { $row = null; }
или, если это строковый столбец, который не может быть обнулен, вы можете сделать
if ($row[0] === null) { $row = 'NO DATA'; }