如何解决未定义偏移量:1个laravel 6
我想更新多级选择项上类别的数据,但是我有一个问题,我可以在不选择父项的情况下编辑类别,但是当我选择父项时我不能编辑类别。然后显示一个错误,称为未定义的偏移量:1,这里是跟踪错误
Illuminate\Foundation\Bootstrap\HandleExceptions::handleError
C:\laragon\www\oesingcoffee\vendor\laravel\framework\src\Illuminate\Validation\Concerns\ValidatesAttributes.php:874
这是在laravel框架中验证attrib
protected function getExtraConditions(array $segments)
{
$extra = [];
$count = count($segments);
for ($i = 0; $i < $count; $i += 2) {
$extra[$segments[$i]] = $segments[$i + 1]; //this is the 874 line
}
return $extra;
}
这是CategoryRequest类
class CategoryRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$parentId = (int) $this->get('parent_id');
$id = (int) $this->get('id');
if($this->method() == 'PUT'){
if($parentId > 0){
$name = 'required|unique:categories,name,'.$id.'id,parent_id,'.$parentId;
}else{
$name = 'required|unique:categories,'.$id;
}
$slug = 'unique:categories,slug,'.$id;
}else{
$name = 'required|unique:categories,NULL,id,'.$parentId;
$slug = 'unique:categories,slug';
}
return [
'name' => $name,'slug' => $slug,];
}
}
这是我用来更新数据的控制器
public function update(CategoryRequest $request,$id)
{
$params = $request->except('_token');
$params['slug'] = Str::slug($params['name']);
$params['parent_id'] = (int)$params['parent_id'];
$category = Category::findOrFail($id);
if ($category->update($params)) {
Session::flash('success','Category has been updated.');
}
return redirect('admin/categories');
}
此视图表单
@extends('admin.layout')
@section('content')
@php
$formTitle = !empty($category) ? 'Update' : 'New'
@endphp
<div class="content">
<div class="row">
<div class="col-lg-6">
<div class="card card-default">
<div class="card-header card-header-border-bottom">
<h2>{{ $formTitle }} Category</h2>
</div>
<div class="card-body">
@include('admin.partials.flash',['$errors' => $errors])
@if (!empty($category))
{!! Form::model($category,['url' => ['admin/categories',$category->id],'method' => 'PUT']) !!}
{!! Form::hidden('id') !!}
@else
{!! Form::open(['url' => 'admin/categories']) !!}
@endif
<div class="form-group">
{!! Form::label('name','Name') !!}
{!! Form::text('name',null,['class' => 'form-control','placeholder' => 'category name']) !!}
</div>
<div class="form-group">
{!! Form::label('parent_id','Parent') !!}
{!! General::selectMultiLevel('parent_id',$categories,'selected' => !empty(old('parent_id')) ? old('parent_id') : !empty($category['parent_id']) ? $category['parent_id'] : '','placeholder' => '-- Choose Category --']) !!}
</div>
<div class="form-footer pt-5 border-top">
<button type="submit" class="btn btn-primary btn-default">Save</button>
<a href="{{ url('admin/categories') }}" class="btn btn-secondary btn-default">Back</a>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
@endSection
这是迁移
public function up()
{
Schema::create('categories',function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('slug');
$table->bigInteger('parent_id');
$table->timestamps();
});
}
这是控制器中的编辑方法
public function edit($id)
{
$category = Category::findOrFail($id);
$categories = Category::orderBy('name','asc')->get();
$this->data['categories'] = $categories->toArray();
$this->data['category'] = $category;
return view('admin.categories.form',$this->data);
}
解决方法
您应该尝试save()方法。
public function update(CategoryRequest $request,$id)
{
$params = $request->except('_token');
$params['slug'] = Str::slug($params['name']);
$params['parent_id'] = (int)$params['parent_id'];
$category = Category::findOrFail($id);
if ($category->save()) {
Session::flash('success','Category has been updated.');
}
return redirect('admin/categories');
}
替换上面的一个。
,public function update(CategoryRequest $request,$id)
{
$params = $request->except('_token');
$category = Category::findOrFail($id);
$category->slug = Str::slug($params['name']);
$category->parent_id = (int)$params['parent_id'];
$category->save();
Session::flash('success','Category has been updated.');
return redirect('admin/categories');
}
,
我认为您的问题不是您的验证规则(特别是您的唯一规则)。我可以提出其他建议吗?
我现在没有测试环境,所以现在可能需要做一些调整。
use Illuminate\Validation\Rule;
...
public function rules()
{
$name = [
'required',Rule::unique('categories')->where(function ($query) {
return $query->where('name',$this->name)
->where('parent_id',$this->parent_id);
})->ignore($this->id,'id'),];
$slug = [
Rule::unique('categories','slug')->ignore($this->id,];
return [
'name' => $name,'slug' => $slug,];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。