首页 > 解决方案 > Laravel - 保存与更新

问题描述

我想知道哪个是更新数据库记录的更好解决方案 -addResources1还是addresources2

首先我尝试了update查询方法,因为它对我来说很清楚。第二个想法是,我正在构建模型,所以让我们使用它们然后保存。

你怎么看?

有几个类似的主题,但是他们说save()只会插入一条新记录,在这种情况下它不是真的。

资源服务:

 namespace App\Services;

 use App\Resource as Resource;
 use Illuminate\Support\Facades\Auth;

 class ResourcesService
 {

     public function addResources1($userId, $wood, $stone, $food, $gold)
     {
         $resources = new Resource;
         $resources = $resources->where('userId', $userId)->update([
         'wood' => $wood,
         'stone' => $stone,
         'food' => $food,
         'gold' => $gold,
          ]);
      }

      public function addResources2($userId, $wood, $stone, $food, $gold)
      {
          $resources = new Resource;
          $resources = $resources->where('userId', $userId)->first();
          $resources->wood = $wood;
          $resources->stone = $stone;
          $resources->food = $food;
          $resources->gold = $gold;
          $resources->save();
      }
}

资源模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Resource extends Model
{
    protected $table = 'resources';

}

标签: phplaravelorm

解决方案


这取决于您的用例。

1)什么将有最少的 SQL 查询?

方法addResources1将使用 1 个 SQL 查询。

方法addResources2将使用 2 个 SQL 查询。一个用于获取记录,另一个用于更新记录。


2)模型敏感吗?(例如is_admin布尔列)

如果它确实有敏感列,则不应将该列放入fillable模型的属性中,因此方法addResources1将失败。


3)在记录更新之后但在提交到数据库之前,我是否需要做其他事情?

在这种情况下,addResources2它将更适合您,因为它不会提交,除非save()被执行并且那是在您完成所有其他业务逻辑之后。


推荐阅读