此集合实例上不存在属性 [stock]

Posted

技术标签:

【中文标题】此集合实例上不存在属性 [stock]【英文标题】:Property [stock] does not exist on this collection instance 【发布时间】:2020-11-12 08:14:01 【问题描述】:

在我的 Cart 模型中,我与 Product 模型有关系。在 Product 模型中,我与 Product_attribute 有关系模型。 但我与 Product_attribute 模型没有关系。 在本例中,我编写此代码以访问 Product_attribute 模型。

$getCartDetails = Cart::with('product.product_attribute')->where('id',$id)->first();

这很好。我访问产品产品属性数据

现在我想计算 product_attribute stock,类似的方法想计算 cart quantity。 如果Product_attribute->stock >= Cart->quantity,我会更新购物车表,否则不会

这就是我写这段代码的原因

   public  function updateCartQuantity($id,$quantity)
   
       $getCartDetails = Cart::with('product.product_attribute')->where('id',$id)->first();

      if($getCartDetails->product->product_attribute->stock->sum() >= $getCartDetails->quantity->sum()) 

           DB::table('carts')->where('id', $id)->increment('quantity', $quantity);
           return back()->with('success', 'product Quantity in the cart Updated Successfully!');
       else
       return back()->with('error', 'Required Product Quantity is not available!');
         


   

【问题讨论】:

试试dd($getCartDetails->product->product_attribute->stock) 可能你无法达到库存。 同样的问题。。 当我使用这个时,我访问产品和产品属性数据` $getCartDetails = Cart::with('product.product_attribute')->where('id',$id)- >第一(); ` 尝试$getCartDetails->product->product_attribute()->stock->sum() 而不是$getCartDetails->product->product_attribute->stock->sum() 仍然出现错误,尝试dd($getCartDetails->product->product_attribute) 使用 dd($getCartDetails->product->product_attribute) ,我得到 product_attribute 的所有数据 【参考方案1】:

您可以直接查看

$check_qty =    DB::table('product_attribues)->where('product_id',$getCartDetails->product_id)->where('size',$getCartDetails->size)->first();

$check_qty 将根据购物车表 product_id 和 Size 为您提供库存数量。使用 If 条件检查更新的数量和库存数量后。

因为您可以根据 product_id 和 Size 从 product_attribues 表中找到产品库存

【讨论】:

【参考方案2】:

查看错误,上面写着property stock doesn't exist on the collection instance.

只需检查一次关系。正如我从名称中可以理解的那样,该产品可能有多个与之关联的 product_attributes (One to many relation)。这可能是收集错误时属性不存在的原因。而且您正在尝试访问不应该是这种情况的集合上的模型属性。

编辑:

$getCartDetails->product->product_attribute->sum('stock') 。这是您的 if 条件所需要的。它将为您获取集合中所有实例的 stock 属性的总和。这是参考https://laravel.com/docs/7.x/collections#method-sum

【讨论】:

以上是关于此集合实例上不存在属性 [stock]的主要内容,如果未能解决你的问题,请参考以下文章

此集合实例上不存在属性 [id] [重复]

此集合实例上不存在异常属性 [图像]

此集合实例上不存在属性 [task_category]

此集合实例上不存在属性 [名称] [重复]

Laravel - 此集合实例上不存在属性 [fileieres]

Laravel 8 Seeders:此集合实例上不存在属性 [id]