Laravel无需使用with或load即可获取最近创建的相关模型

时间:2018-08-28 07:37:58

标签: php laravel laravel-5 eloquent

我在创建相关模型时遇到了一个具体问题:

$detail = new \App\Detail
$detail->item = "Soda Pop"
$detail->quantity += 1
$order->details()->save($detail)

此代码位于 foreach语句中,我最终为购买的每个商品创建了一个详细信息。但是我有一个具体要求,如果详细列表中已经存在某个项目,则在其中添加 +1

但是在保存关系时,我无权访问对象,这迫使我从数据库中重新加载。因此,要么我必须执行$order->load('details')才能使代码正常工作。

有什么方法可以访问最近创建的对象并仅从内存中检查是否已插入?

2 个答案:

答案 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();