php - 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';
}
解决方案
这取决于您的用例。
1)什么将有最少的 SQL 查询?
方法addResources1
将使用 1 个 SQL 查询。
方法addResources2
将使用 2 个 SQL 查询。一个用于获取记录,另一个用于更新记录。
2)模型敏感吗?(例如is_admin
布尔列)
如果它确实有敏感列,则不应将该列放入fillable
模型的属性中,因此方法addResources1
将失败。
3)在记录更新之后但在提交到数据库之前,我是否需要做其他事情?
在这种情况下,addResources2
它将更适合您,因为它不会提交,除非save()
被执行并且那是在您完成所有其他业务逻辑之后。
推荐阅读
- akka - Full featured Cron scheduling of akka streams
- angular - prevent blur on content editable element on clicking a specific element (angular)
- css - Distance content from border in container with scrollbar
- android - receiving error when inflating spinner layout
- linkedin - 从 LinkedIn 获取特定信息
- dialogflow-es - 是否可以将 Google 的 WaveNet 文本转语音模型用于 Dialogflow 代理的 Actions-On-Google 集成?
- javascript - 使用 react-leaflet 时缺少 Leaflet Map Tiles
- go - 如何让其他人使用 googleapi 阅读和编辑 google 表格(未与他们共享),而无需他们下载凭据?
- kotlin - Kotlin vert.x parsing a JSON String to a Data class using gson always returns null
- asp.net - 如果未通过身份验证,则使用域重定向 302