Php Laravel-保存与更新

Php Laravel-保存与更新,php,laravel,orm,Php,Laravel,Orm,我想知道哪一个是更新数据库记录的更好的解决方案-addResources1还是addresources2 首先,我尝试了update查询方法,因为它看起来很清楚。第二个想法是,我正在构建模型,让我们使用它们,然后保存 你觉得怎么样 有几个类似的主题,但是他们说,save()只会插入一条新记录,在这种情况下不是这样的 资源服务: namespace App\Services; use App\Resource as Resource; use Illuminate\Support\Faca

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

}

这取决于您的用例

1)什么样的SQL查询量最少

方法
addResources1
将使用1个SQL查询

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


2)模型是否敏感?(例如,
is_admin
bool列)

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


3)我是否需要在记录更新后但在提交到数据库之前执行其他操作

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

是解决此类问题的Stackexchange网络的更好站点。如果您对自己正在做的事情有信心,第一个样本就可以了。我这么说是因为第二个示例将只更新数据库中的一行,即使有更多行具有相同的
userId
列值。如果您知道您的结构,那么第一个示例将更清楚,以了解它的作用。此外,如果您设置模型之间的关系,您可以以某种方式将其链接起来

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