如何在 Eloquent 模型中使用 Request->all()

Posted

技术标签:

【中文标题】如何在 Eloquent 模型中使用 Request->all()【英文标题】:How to use Request->all() with Eloquent models 【发布时间】:2016-06-08 09:28:32 【问题描述】:

我有一个流明应用程序,我需要在其中存储传入的 JSON 请求。如果我写这样的代码:

public function store(Request $request)
  
    if ($request->isJson())
    
      $data = $request->all();

      $transaction = new Transaction();
      if (array_key_exists('amount', $data))
        $transaction->amount = $data['amount'];
      if (array_key_exists('typology', $data))
        $transaction->typology = $data['typology'];

      $result = $transaction->isValid();
      if($result === TRUE )
      
        $transaction->save();
        return $this->response->created();
      

      return $this->response->errorBadRequest($result);
    

    return $this->response->errorBadRequest();
  

完美运行。但是在那种模式下使用 Request 很无聊,因为我必须检查每个输入字段才能将它们插入到我的模型中。有没有快速向模型发送请求的方法?

【问题讨论】:

【参考方案1】:

您可以使用fill 方法或constructor。首先,您必须在模型的 fillable 属性中包含所有可批量分配的属性

方法一(使用构造函数)

$transaction = new Transaction($request->all());

方法二(使用fill方法)

$transaction = new Transaction();
$transaction->fill($request->all());

【讨论】:

@patricus 答案更完整,因为它包含提问者代码中包含的isValid() 调用。它阻止我使用$fooModel->some_foo_col = $request->get('some_foo_col ');丑陋的代码。【参考方案2】:

您可以对 Eloquent 模型进行批量分配,但您需要首先在模型上设置要允许批量分配的字段。在您的模型中,设置您的 $fillable 数组:

class Transaction extends Model 
    protected $fillable = ['amount', 'typology'];

这将允许amounttypology 可以批量分配。这意味着您可以通过接受数组的方法(例如构造函数,或fill() 方法)来分配它们。

使用构造函数的示例:

$data = $request->all();
$transaction = new Transaction($data);

$result = $transaction->isValid();

一个使用fill()的例子:

$data = $request->all();
$transaction = new Transaction();
$transaction->fill($data);

$result = $transaction->isValid();

【讨论】:

以上是关于如何在 Eloquent 模型中使用 Request->all()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eloquent 模型中使用 Request->all()

在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型

如何在 Eloquent ORM 中从 JSON 中保存具有相关记录的模型

Payum - Laravel 4 的包。如何使用 Eloquent 而不是 FilesystemStorage 创建模型数据?

如何使用 Eloquent 模型获取多个表列名

Laravel如何在Eloquent模型中添加自定义函数?