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,]);