Laravel:使用资源控制器更新表的单个字段

TJ *_*ort 2 php rest laravel laravel-5

我有一个资源控制器(包含所有操作:索引,创建,存储,显示,编辑,更新和销毁),我想知道编辑单个字段列的最佳方法是什么?

假设我们有一个带有名称,电子邮件,密码和活动的Users表(active是一个小的int 0或1).

在用户管理页面中,有一个用于激活/停用用户的按钮(向服务器发出请求以更新所选用户的"活动"字段).

我应该在Controller中创建一个新方法updateStatus,还是有办法使用update方法处理它?

在更新"活动"列时,我不想错误地允许名称,电子邮件或密码中的空值,因此我需要保留验证规则(简而言之,所有字段都是必需的),但这意味着更新时在"活动"字段中,我需要传递请求中的所有用户数据.

在这一点上,我很困惑,所有的帮助将不胜感激.

提前致谢!

Ali*_*ahi 5

当您将实例从编辑操作发送到表单时,将发送所有数据,您可以根据需要编辑一个或多个列.例如 :

    public function update(Request $request , $id)
{
$data = YourModel::find($id);
$data->someColumn = $request->someColumn;
$data->save();
}
Run Code Online (Sandbox Code Playgroud)

您没有为其发送任何值的其他字段将保存为之前的状态.为此,您可以设置如下表单:

    {!! Form::model($yourInstance,['route'=>['someRoute.update','id'=>$yourInstance->id],'method'=>'PATCH',]) !!}
Run Code Online (Sandbox Code Playgroud)


fre*_*ed2 2

听起来您是 Laravel 新手,有些关键概念可能很难掌握。

在我看来,最好的方法是通过模型类。Laravel 有一个内置的 Users 模型,这有点令人困惑,所以我将使用不同的模型作为如何更新 db 字段的示例。

php artisan make:model MyData
Run Code Online (Sandbox Code Playgroud)

将为 app/ 中的 MyData 表创建一个新的空模型文件

该文件将如下所示:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class MyData extends Model
{
    //
}
Run Code Online (Sandbox Code Playgroud)

尽管其中没有任何内容,但它现在允许您使用 Eloquent 更改数据库表。

在您的控制器中添加以下内容以确保包含模型:

use App\MyData as MyData;
Run Code Online (Sandbox Code Playgroud)

如果使用表单中的用户输入进行更新,控制器应该有一个类似这样的方法:

public function updateStatus(MyData $myData, Request $request){

    $myData->where('id', $request->id)->update(['active' => $request->active]);
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样做完全相同的事情:

public function updateStatus(Request $request){
  $data = MyData::find($request->id);
  $data->active = $request->active;
  $data->save();
}
Run Code Online (Sandbox Code Playgroud)

两种方法在不同的情况下都有意义。

请参阅https://laravel.com/docs/5.5/eloquent#updates