#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. Полное сообщение об ошибке должно содержать трассировку стека, показывающую, в какой строке она встречается, в каком файле и все функции, которые вызываются между ними.