Laravel报错:集合实例不存在amount_requested属性,但字段存在
问题排查与解决
核心原因
你调用Product_Market::where(...)->get()得到的$repeated_entry是Eloquent集合(Collection),而非单个模型实例。集合本身没有amount_requested属性,这个属性属于集合内的单个Product_Market模型对象,所以直接访问$repeated_entry->amount_requested会触发属性不存在的报错。
解决方案(保留集合适配后续代码)
你可以在保留原集合的前提下,先从集合中取出对应的单个模型实例来获取属性值,修改后的代码如下:
$repeated_entry = Product_Market::where('produto_id', '=', $product->id)->where('market_id', '=', $market->id)->get(); $repeated_entry_update = Product_Market::where('produto_id', '=', $product->id)->where('market_id', '=', $market->id); if($repeated_entry->count()){ // 从集合中取出第一个模型实例 $first_entry = $repeated_entry->first(); $repeated_entry_update->update([ 'amount_requested' => $first_entry->amount_requested + $request->product_amount, 'amount_left' => $first_entry->amount_requested + $request->product_amount, ]); }else{ // 模型类名保持驼峰写法 Product_Market::create([ 'produto_id' => $product['id'], 'market_id' => $market['id'], 'amount_requested' => $request->product_amount, 'amount_left' => $request->product_amount, 'amount_sold' => '0' ]); }
额外优化建议
如果你的查询逻辑确保只会返回0或1条记录,也可以用first()替代get()获取单个模型实例,同时用exists()判断是否存在,这样代码更简洁,但如果你必须保留集合,上面的方案更适合:
$repeated_entry = Product_Market::where('produto_id', '=', $product->id)->where('market_id', '=', $market->id)->first(); if($repeated_entry){ $repeated_entry->update([ 'amount_requested' => $repeated_entry->amount_requested + $request->product_amount, 'amount_left' => $repeated_entry->amount_requested + $request->product_amount, ]); }else{ Product_Market::create([ 'produto_id' => $product['id'], 'market_id' => $market['id'], 'amount_requested' => $request->product_amount, 'amount_left' => $request->product_amount, 'amount_sold' => '0' ]); }
内容的提问来源于stack exchange,提问作者evinn
相关产品推荐
相关产品推荐

