簡體   English   中英

Eloquent 更新在 Laravel 5.6 中不起作用

[英]Eloquent update doesn't work in laravel 5.6

我想制作更新功能,但該功能不起作用,請幫我解決這個問題,這是我的代碼:

這是路線

Route::resource('ItemName', 'ItemNameController');

這是控制器

public function update(Request $request, ItemName $itemName)
{
    request()->validate([
        'inc'            => 'required',
        'item_name'      => 'required',
        'short_name'     => 'required',
        'definition_eng' => 'max:1000', 
        'definition_ind' => 'max:1000',
    ]);

    $itemName->update($request->all());

    return redirect('ItemName')->with('success', 'Item Name Updated Successfully');
}

這是視圖

<form action="{{ action('ItemNameController@update', $ItemName->id) }}" method="post">
    @csrf
    @method('PUT')
    <input class="form-control col-4" type="text" name="inc" placeholder="INC" value="{{$ItemName->inc}}">
    <input class="form-control mt-2" type="text" name="item_name" placeholder="Item Name" value="{{$ItemName->item_name}}">
    <input class="form-control mt-2" type="text" name="short_name" placeholder="Short Name" value="{{$ItemName->short_name}}">
    <input class="form-control mt-2" type="text" name="definition_eng" placeholder="English Definition" value="{{$ItemName->definition_eng}}">
    <input class="form-control mt-2" type="text" name="definition_ind" placeholder="Indonesia Definition" value="{{$ItemName->definition_ind}}">
    <input type="submit" class="btn btn-primary" value="Edit">
</form>

當我轉儲此代碼時的價值

ItemName {#512 ▼
#table: "tbl_item_name"
#fillable: array:5 [▼
0 => "inc"
1 => "item_name"
2 => "short_name"
3 => "definition_eng"
4 => "definition_ind"
]
#connection: "sqlsrv"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:8 [▶]
#original: array:8 [▶]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▼
0 => "*"
]
}

問題是更新功能不起作用,我沒有收到任何錯誤,有人可以幫助我嗎?

確保在 Eloquent 模型上正確設置了$fillable數組。

class ItemName extends Model
{

    protected $fillable = [
        'inc',
        'item_name',
        'short_name',
        'definition_eng',
        'definition_ind',
    ];

    // ..

}

通常,如果您調用update()並且沒有定義$fillable fillable 數組,Laravel 會創建一個MassAssignmentException

只要你在$fillable fillable 數組上定義了任何東西,Laravel 就會默默地忽略任何額外的值。

我遇到了這個問題

我在控制器中的更新功能如下

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Person  $person
     * @return \Illuminate\Http\Response
     */
    public function update(Person $person, Request $request)
    {
        $person->update($request->validate([
            'forename' => 'required',
            'surname' => ''
        ]));

        return redirect('/people');
    }

我的routes/web.php文件有以下路由:

Route::put('/people/{id}', [PersonController::class, 'update']);

要解決此問題,通配符匹配應與模型名稱相同。

Route::put('/people/{person}', [PersonController::class, 'update']);

嘗試填充而不是更新。

 $itemName->fill($request->all());
 $itemName->save();

希望這會幫助你

你應該試試這個:

$items = ItemName::where($itemName)->update($request->all());

請注意,如果您的更新值與舊記錄相同,則 update() 函數會響應 false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM