Как импортировать файл Excel в две таблицы с входными тегами одновременно?

#php #laravel #laravel-excel

#php #laravel #laravel-excel

Вопрос:

У меня есть две таблицы, одна из которых — пользователи, а следующая — студенты, в таблице students хранятся данные пользователей в зависимости от их роли. и связь между пользователем и студентом — это user_id в таблице students. И форма включает в себя три ввода для текста и один для файла Excel для импорта. Я хочу импортировать пользователей по файлам и их данные по входным данным. моя форма выглядит так:

 <form method='post' action="{{ route('importExcel') }}" enctype="multipart/form-data">
          @csrf
          <div class="box-body row">
                        
            <div class="col-md-12">
                <label for="faculty" class="col-md-12">فاکولته</label>
                <div class="form-group">
                    <select name='faculty' class="form-control" id="faculty">
                            <option value=""> انتخاب فاکولته </option>
                        @foreach($faculties as $faculty)
                            <option value="{{ $faculty->id }}" >{{ $faculty->name }}</option>
                        @endforeach
                    </select>
                </div>
            </div>
            
            <div class="col-md-12">
                <label for="department" class="col-md-12">دیپارتمنت</label>
                <div class="form-group">
                    <select class="form-control" name="department" id="department"> 
                        <option value="">انتخاب دیپارتمنت</option>
                        @foreach($departments as $department)
                            <option value="{{ $department->id }}">{{ $department->name }}</option>
                        @endforeach
                    </select>
                </div>
            </div>
            
            <div class="col-md-12">
                <label for="sesson" class="col-md-12">فصل</label>
                <div class="form-group">
                    <select name="sesson" id="sesson" class="form-control">
                        <option value="">انتخاب فصل</option>
                        <option value="spring">بهار</option>
                        <option value="fall">خزان</option>
                    </select>
                </div>
            </div>

            <div class="col-md-12">
                <label for="file" class="col-md-12">فایل اکسل</label>
                <div class="form-group">
                    <input type="file" name="file" class="form-control" id="file">
                </div>
            </div>
            
            <input type="hidden" name="role" value="user">
            <input type="hidden" name="admin" value="admin">
            
          </div>
          <!-- /.box-body -->
          <div class="box-footer">
            <button type="submit" class="btn btn-info pull-left submit">تایید</button>
          </div>
          <!-- /.box-footer -->
        </form>
 

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

 class UsersImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        foreach ($rows as $row) 
        {
            User::create([
                'name'     => str_replace(' ', '_', $row['name']), 
                'email'    => $row['email'], 
                'password' => bcrypt(str_replace(' ', '_', $row['name'])),
                'role'     => 'user',
            ]);

            Student::create([
                'user_id' =>  DB::table('users')->getPdo()->lastInsertId(),
                'department_id' => $row['department'],
                'faculty_id'    => $row['faculty'],
                'sesson'        => $row['sesson']
            ]);
        }
    }

}
 

и мой контроллер такой:

 try{
            $this->validate($request,[
                'faculty' => 'required',
                'department'=> 'required',           
                'sesson'=> 'required',           
                'file'=> 'required',           
            ]);

            $file = $request->file('file');
            $faculty =  $request-> faculty;
            $department = $request -> department;
            $sesson = $request -> sesson;

           Excel::import(new UsersImport,[$file, $faculty, $department, $sesson]);
           return redirect()->route('admin.students')->with('success','عملیات موفقانه انجام شد.');
            
        }
        catch(Exception $e){
            return redirect()->back()->with('error','عملیات انجام نشد!');
        }
 

но он не работает, ошибка выглядит следующим образом: pathinfo() ожидает, что параметр 1 будет строкой, заданный массив

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

1. Ошибка верна — см. php.net/manual/en/function . pathinfo.php . но где вызов информации о пути в коде, который вы показали? Если вы собираетесь сообщить нам об ошибке, имеет смысл показать код, в котором она возникает

2. Нет функции для вызова информации о пути, я знаю, почему возникает такая ошибка.

3. Полное сообщение об ошибке должно содержать трассировку стека, показывающую, в какой строке она встречается, в каком файле и все функции, которые вызываются между ними.