Laravel - save与update的区别

4

我想知道更新数据库记录的更好解决方案是什么 - 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';

}
2个回答

2
这取决于您的使用情况。
1)哪个SQL查询最少呢?
方法addResources1将使用1个SQL查询。
方法addResources2将使用2个SQL查询。一个用于获取记录,另一个用于更新记录。
2)模型是否敏感?(例如is_admin布尔列)
如果有敏感列,则不应将该列放入模型的fillable属性中,因此方法addResources1将失败。
3)在记录更新后但提交到数据库之前,我需要做些其他事情吗?
在这种情况下,addResources2更适合您,因为它只有在执行save()并完成所有其他业务逻辑后才会提交。

0

代码审查是Stackexchange网络中更好的网站,适合这种类型的问题。如果您对自己正在做的事情有信心,第一个示例就可以了。我之所以这样说,是因为即使在具有相同userId列值的多行的情况下,第二个示例也只会更新一行数据库。如果您知道自己的结构,第一个示例更清晰地展示了它的功能。此外,如果您在模型之间设置关系,还可以以一种方式链接它们。

$user->resources()->update(['wood' => $wood, 'stone' => $stone, 'food' => $food, 'gold' => $gold,]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接