【问题标题】:Laravel 5.6 saving all fields from request and an extra fieldLaravel 5.6 保存请求中的所有字段和一个额外的字段
【发布时间】:2018-11-07 08:04:49
【问题描述】:

我正在使用 Laravel 中的一个衬垫保存模型中的所有请求字段,如下所示:

$imageRequest = Auth::user()->imageRequests()->save(new ImageRequest($request->all()));

我的模型 ImageRequest 在 $request 中有一堆可填充项,但有 1 个字段不在请求中,我还需要将其保存在表中。

我可以在我的一个衬垫中执行此操作,还是需要像这样单独执行每个可填充的操作:

$imageRequest = new ImageRequest;

$imageRequest->fillable1 = $request->fillable1
...
$imageRequest->fillableNotInForm = "hello";

$imageRequest->save();

【问题讨论】:

  • $imageRequest->fillableNotInForm = "hello"; 因此,如果您希望在 fillableNotInForm 列的每一行中添加 hello(一些字符串文字,并且不会因每个请求而变化),则设置 DEFAULT 值数据库中此列的约束。

标签: php laravel laravel-5


【解决方案1】:

$request->all() 只是一个数组。可以使用array_merge添加。

$imageRequest = Auth::user()->imageRequests()->save(new ImageRequest(array_merge($request->all(), ['index' => 'value'])));

话虽如此,一个班轮很难阅读。为了便于阅读,请考虑将其分成至少 2 行。

【讨论】:

  • 谢谢!也许超出了这个问题的范围,但我怎样才能获得我当前保存的项目的 ID?
  • save() 函数通常返回保存的 id。所以在你的情况下你应该能够做到$imageRequest->id。如果这不起作用,我认为DB::getPdo()->lastInsertId(); 应该可以正常工作。
  • 但问题是我要添加的字段的值应该是 id 如果我正在保存的对象附加了另一个字符串,因此保存尚未完成
  • 在保存对象之前无法获取id。没有办法做到这一点。
  • 所以我应该分 1 步完成?先保存对象再更新记录?
【解决方案2】:

你也可以这样做:

public function upload(ImageRequest $request) 
{
    Auth::user()->imageRequests()->save($request->merge(['not_in_form' => 'value']));    
}

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多