我在创建相关模型时遇到了一个具体问题:
$detail = new \App\Detail
$detail->item = "Soda Pop"
$detail->quantity += 1
$order->details()->save($detail)
此代码位于 foreach语句中,我最终为购买的每个商品创建了一个详细信息。但是我有一个具体要求,如果详细列表中已经存在某个项目,则在其中添加 +1 。
但是在保存关系时,我无权访问对象,这迫使我从数据库中重新加载。因此,要么我必须执行$order->load('details')
才能使代码正常工作。
有什么方法可以访问最近创建的对象并仅从内存中检查是否已插入?
答案 0 :(得分:0)
尝试使用updateOrCreate方法
$detail = App\Detail::updateOrCreate(
['order_id' => $order-id, 'item' => 'Soda Pop'],[]
);
$detail->quantity += 1;
$detail = $detail->update();
答案 1 :(得分:0)
您可以使用firstOrNew:
$detail = $order->details()->firstOrNew(['item' => 'Soda Pop']);
$detail->quantity += 1;
$detail->save();