【问题标题】:laravel 5.5 best way to create datalaravel 5.5 创建数据的最佳方式
【发布时间】:2017-09-22 09:31:18
【问题描述】:

我有一个用于创建新数据的代码, 但我很困惑使用 laravel 5.5 在数据库中插入新数据的最佳方法是什么。

代码 1:

$user = User::create([
    'name' =>  $request->name,
    'username' => $request->username,
    'email' => $request->email,
    'password' => $request->password,
]);

代码 2:

$user = new User();
$user->name = $request->name;
$user->username = $request->username;
$user->email = $request->email;
$user->password = $request->password;
$user->save();

什么是最好的方法?你的理由是什么?

【问题讨论】:

  • 视情况而定。使用create([values in the array]) 会在您的模型中强制执行$fillable$guarded 规则,而单独使用每个属性不会因此在基于用户输入创建模型时使用create([]),在以编程方式更新/创建模型时使用其他语法或当您需要更新受保护的字段时。

标签: laravel laravel-5 laravel-5.5


【解决方案1】:

它们恰好是相同的。第一个选项是执行第二个选项的 Eloquent 方式。 Eloquent 旨在以可读的方式简化语句。像 firstOrCreate 这样的方法是 Eloquent 方式在您的代码中更具可读性和简单性的一个示例。但是你提供的这两个基本上是一样的。

附带说明,如果您需要有条件地保存属性,则第二个选项允许您使用 if 语句或任何条件代码语句..

【讨论】:

    【解决方案2】:

    这两种方式都不错。您需要知道的是何时使用一个或其他选项。

    当您想要接收和存储所有请求数据而不进行任何处理时,您可以使用批量分配方式。但是当您想要更好地控制日期时,您可以选择第二种方式。

    例如

    您有一个订阅表单,它接收包括用户名和密码在内的订阅者数据,但您需要对密码值进行加密。在这种情况下,最好的选择是第二个,因为您将通过请求收到密码属性,然后需要对该值进行加密,最后您将加密密码设置为 $model->password 属性。

    您不需要对可以使用质量分配方法的属性进行绝对控制的任何其他情况。

    【讨论】:

      【解决方案3】:

      关于这个问题还有另一个话题,你也可以参考这个。

      What is different between save(), create() function in laravel 5

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2018-04-03
        • 2023-03-12
        • 2021-01-30
        • 2018-05-16
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 2018-11-09
        相关资源
        最近更新 更多