首页 > 解决方案 > 在 Laravel 6 中仅更新控制器中一个字段的值

问题描述

我的项目要求管理员必须批准用户上传的项目,才能在网站上看到该项目,以进行验证或以某种方式控制一切。所以在 Item 表中,我有一个名为 (status) 的字段,并且有一个默认值 = (denied)。

$table->enum('status',['available','denied'])->default('denied');

管理员看到所有项目,如果管理员单击状态从拒绝更改为已批准,我希望每个项目旁边有一个按钮,称为批准,如何在控制器中创建仅更改状态字段的功能?除了已经在我的控制器中运行的默认编辑和更新功能之外的一个。

public function edit($itemid)
{
    $where = array('itemid' => $itemid);
    $data['item_info'] = Item::where($where)->first();

    return view('items.edititem', $data);
}

public function update(Request $request, $itemid)
{
    $request->validate([
        'name' => 'required',
        'description' => 'required',
        'state' => 'required',
        'price' => 'required',
        'charityfee' => 'required',
        'status' => 'required',
        'category' => 'required',
    ]);

    $update = [
        'name' => $request->name, 'description' => $request->description,
        'state' => $request->state, 'price' => $request->price,
        'charityfee' => $request->charityfee, 'status' => $request->status,
        'category' => $request->category, 'itemphoto' => $request->itemphoto
    ];
    Item::where('itemid', $itemid)->update($update);

    return Redirect::to('profile')
        ->with('success', 'Great! item updated successfully');
}

尽管我尝试了以下代码,但出现了一个错误,即我调用的函数未定义:(

public function editstatus($itemid)
        {
          Item::where('itemid', $itemid)->update(array('itemid' => 'available'));

        } 

控制器中的功能

<td><a href="{{ route('items.editstatus',$item->itemid)}}" class="btn btn-primary">approve</a></td>

视图中的代码

标签: phpmysqlcontrollerlaravel-6insert-update

解决方案


您的问题出在 editstatus 功能上。你想更新status => 'available'但你编码 update itemid => 'available'。这就是它出错的原因。

您的代码应更改为以下内容:

public function editstatus($itemid)
{
    Item::where('itemid', $itemid)->update(array('status' => 'available'));
} 

推荐阅读