如何在 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'];
这将允许amount
和typology
可以批量分配。这意味着您可以通过接受数组的方法(例如构造函数,或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 创建模型数据?