为啥我不能更新 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-&gt;update($request-&gt;all()); dd($updateResult ); 向我显示错误且不显示错误 dd($productCategory); 结果怎么样? 【参考方案1】:

请检查复选框值是作为字符串还是布尔值传递。如果是字符串,则需要在migrate中相应地更改。

【讨论】:

我用 js 代码设置复选框值并在控制器中检查 尝试将“显示”更改为字符串而不是布尔值。 $table->string('shown', 1)->nullable(); 使用 dd($request->all());在更新函数中,并尝试检查所有值是否以正确的字段名称正确传递

以上是关于为啥我不能更新 laravel 中的字段?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的验证器没有在 Laravel 中验证?

我无法从 laravel 中的输入值中获取请求值

Laravel 复选框问题,我无法更新数据透视表

为啥 Laravel 中的 PHPUnit 不能访问存在的路由?

更新 Laravel 列中的字段

如何更新 Laravel 集体中的唯一字段? [复制]