为啥我不能更新 laravel 中的字段?
Posted
技术标签:
【中文标题】为啥我不能更新 laravel 中的字段?【英文标题】:Why Can't I Update Fields in laravel?为什么我不能更新 laravel 中的字段? 【发布时间】:2020-10-27 21:48:54 【问题描述】:我的项目有一个表格,只是更新字段有问题。 我正在检查 PUT 或 PATCH ,但它没有用。 我删除了外键并重复检查,但问题没有解决。 我使用 lavavel 调试器并查看更新方法的请求参数的权利。 我检查请求正常但未发送到 mysql。 (mysql正在运行) (没有错误,但没有更新) 请帮助我。谢了。
edit.blade.php
<form action=" route('ProductCategory.update',$productCategory->id) " method="POST">
@csrf
@method('PATCH')
<input type="hidden" name="user_id" value=" $usr_id ">
<input type="hidden" name="name" value=" $productCategory->name ">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>نام:</strong>
<input type="text" value=" $productCategory->name " class="form-control" disabled>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-6">
<div class="form-group">
<strong>ترتیب:</strong>
<select name="order_id" class="form-control">
@for($i = $cnt; $i >= 0; $i--)
<option value="$i+1" ($productCategory->orderid == $i+1 ? "selected" : "")>$i+1</option>
@endfor
</select>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-6">
<div class="form-group">
<input type="checkbox" name="shown" style="margin: 30px 8px 30px 10px; transform : scale(2);" value="$productCategory->shown == 1 ? '1' : '0'" ($productCategory->shown == 1 ? "checked" : "") onclick="$(this).val(this.checked ? '1' : '0')">
<strong>نمایش</strong>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-success">بروز رسانی</button>
</div>
</div>
</form>
型号
class ProductCategory extends Model
protected $table = 'product_category';
protected $primaryKey = 'id';
protected $fillable = [
'name', 'user_id', 'shown', 'order_id'
];
public $timestamps = true;
控制器
public function edit($id)
$cnt = ProductCategory::count();
$usr_id = Auth::id();
$productCategory = ProductCategory::find($id);
return view('ProductCategory.edit',compact('productCategory', 'cnt', 'usr_id'));
public function update(Request $request, ProductCategory $productCategory)
$shown = $request['shown'];
if (empty($shown))
$request['shown'] = 0;
$productCategory->update($request->all());
/*$productCategory->user_id = Auth::id();
$productCategory->name = $request->name;
$productCategory->shown = $request->shown;
$productCategory->order_id = $request->order_id;
$productCategory->save();*/
/*DB::table('product_category')
->where('id', $request['id'])
->update(
[
'shown' => $request['shown'],
'order_id' => $request['order_id'],
]
);*/
return redirect()->route('ProductCategory.index')
->with('success','رکورد با موفقیت بروزرسانی شد.');
迁移
public function up()
Schema::create('product_category', function (Blueprint $table)
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('name', 100)->unique();
$table->boolean('shown')->nullable()->default(true);
$table->tinyInteger('order_id');
$table->timestamps();
);
web.config
Route::resource('ProductCategory','ProductCategoryController');
dd($productCategory);
App\ProductCategory #1401
#table: "product_category"
#primaryKey: "id"
#fillable: array:4 [▶]
+timestamps: true
#connection: null
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
#hidden: []
#visible: []
#guarded: array:1 [▶]
【问题讨论】:
您在更新过程中收到了哪些错误消息? 请在此处添加路线代码,以便我们为您提供帮助。 在你的更新方法中尝试dd($productCategory);
如果你得到它正确,然后尝试调试更新结果$updateResult = $productCategory->update($request->all()); dd($updateResult );
向我显示错误且不显示错误
dd($productCategory);
结果怎么样?
【参考方案1】:
请检查复选框值是作为字符串还是布尔值传递。如果是字符串,则需要在migrate中相应地更改。
【讨论】:
我用 js 代码设置复选框值并在控制器中检查 尝试将“显示”更改为字符串而不是布尔值。 $table->string('shown', 1)->nullable(); 使用 dd($request->all());在更新函数中,并尝试检查所有值是否以正确的字段名称正确传递以上是关于为啥我不能更新 laravel 中的字段?的主要内容,如果未能解决你的问题,请参考以下文章