【问题标题】:Accessors on relationship not working in Laravel关系访问器在 Laravel 中不起作用
【发布时间】:2021-01-12 14:10:28
【问题描述】:

我有两个模型 Cart 和 Products

在产品型号上我有一个'accessor:amount

$appends = ['amount'];

public function getAmountAttribute(){
    return $this->price * $this->taxe;
}

但是当我试图从这样的关系中获取金额时:

$cart = Cart::where('id',$uid)->with('products')->get();

foreach($cart as $row){
    print_r($row->products->amount);
}

它告诉我“此集合实例上不存在属性 [数量]。”

有什么问题?

更新

产品的购物车关系

public function products(){
    return $this->hasMany(Product::class,'id','product_id');
}

【问题讨论】:

  • 我猜是 Cart -> Products 是一个 hasMany,所以你需要遍历 products。
  • 在附加属性之后添加protected protected $appends = ['amount'];

标签: php laravel accessor


【解决方案1】:

$row->products 是 hasMany 关系吗?如果是,则 $row->products 返回一个 Collection 实例,您必须遍历 $row->products 之类的,

foreach($cart as $row){
    $row->products->each(function($product){
        print_r($product->amount);
    });
}

【讨论】:

    【解决方案2】:

    您需要迭代购物车的产品

    foreach ($cart as $row) {
    
        foreach($row->products as $product) {
       
           dd($product->amount);
    
        }
    
    }
    

    在您的情况下,如果您在 foreach 中使用 dd($row->products),您将获得一个没有属性 amount 的产品集合,因此您需要遍历 $cart->products 并获取每个产品的数量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2018-08-31
      • 2020-03-24
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      相关资源
      最近更新 更多