我有一个资源控制器(包含所有操作:索引,创建,存储,显示,编辑,更新和销毁),我想知道编辑单个字段列的最佳方法是什么?
假设我们有一个名称,电子邮件,密码和活动的用户表(活动是一个小的0或1)。
在用户管理页面中,有一个用于激活/停用用户的按钮(向服务器发出请求以更新所选用户的“活动”字段)。
我应该在Controller中创建一个新的方法updateStatus,还是有办法使用更新方法处理它?</ p>
在更新“活动”列时,我不想错误地允许名称,电子邮件或密码中的空值,因此我需要保留验证规则(简而言之,所有字段都是必需的),但是这样意味着更新“活动”字段时,我需要传递请求中的所有用户数据。
此时我很困惑,所有的帮助都将受到赞赏。
提前致谢!
答案 0 :(得分:5)
当您将实例从编辑操作发送到表单时,将发送所有数据,您可以根据需要编辑一个或多个列。 例如:
public function update(Request $request , $id)
{
$data = YourModel::find($id);
$data->someColumn = $request->someColumn;
$data->save();
}
您未为其发送任何值的其他字段将保存为之前的状态。为此,您可以设置如下表单:
{!! Form::model($yourInstance,['route'=>['someRoute.update','id'=>$yourInstance->id],'method'=>'PATCH',]) !!}
答案 1 :(得分:1)
听起来你是Laravel的新手,一些关键概念很难掌握。
在我看来,最好的方法是通过Model类。 Laravel有一个内置的用户模型,这有点让人感到困惑,因此我将使用不同的模型作为如何更新数据库字段的示例。
php artisan make:model MyData
将在app /
中为MyData表创建一个新的空模型文件该文件如下所示:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class MyData extends Model
{
//
}
即使没有任何内容,它现在允许您使用Eloquent更改数据库表。
在您的控制器中添加此项以确保包含该模型:
use App\MyData as MyData;
如果使用表单中的用户输入进行更新,控制器应该有类似的方法:
public function updateStatus(MyData $myData, Request $request){
$myData->where('id', $request->id)->update(['active' => $request->active]);
}
你可以做同样的事情:
public function updateStatus(Request $request){
$data = MyData::find($request->id);
$data->active = $request->active;
$data->save();
}
这两种方法在不同情况下都有意义。