【问题标题】:Sum price of one to many relation ship (laravel)一对多关系的总价格(laravel)
【发布时间】:2018-12-21 22:30:30
【问题描述】:

我有一对多关系的问题!所以我尝试总结产品价格,所以这就是我的意思:

型号: 产品.php

/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function orders(){
    return $this->hasMany(Order::class);
}

型号: 订单.php

/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function product(){
    return $this->belongsTo(Product::class);
}

所以我想做这样的事情:$var->product->price->sum();

如果需要,我的数据库:

订单: id product_id|user_id| |-|----------|-------| |1|1 |1 | | | | |

而 Products 只有 4 列:id,name,price,description

我的意思是:

 products:

  id\1

  name\productname

  price \1.00USD

  id\2

  name\productname2

  price \1.00USD

它必须返回所有产品的总和,所以它必须返回 2.00USD

@Jonas Staudenmeir

【问题讨论】:

  • 您的每个订单只有一件商品?如果没有,那么您可能需要many to many 与中间表的关系。 Doc
  • 是的,我每个订单只有一件商品
  • 你到底想总结什么? $var 是什么?
  • 如果您只有一种产品,那么为什么要使用sum?你可以试试$order->product->price;。如果您在订单中有quantity 字段,您可以将价格乘以该字段。
  • hmm.. 你能解释一下如何处理多对多关系吗?

标签: php laravel eloquent


【解决方案1】:

试试这个 QueryBuilder 查询:

 DB::table('orders')
    ->leftJoin('products','orders.product_id','=','products.id')
    ->where('orders.user_id',Auth::user()->id)
    ->select('orders.*','products.*',DB::raw("SUM(products.price) as order_total"))
    ->groupBy('orders.product_id')
    ->get();

【讨论】:

    【解决方案2】:

    我找到了解决办法!所以我做到了

    我使用像之前这样的当前关系,我在我的 order.php 模型

    public function getTotalPrice() {
    
    $orders = self::with('product')->get();
    
    $total = 0;
    
    foreach($orders as $order) {
     $total += $order->product->price;
    } 
    
    return $total;
    }
    

    现在我可以像 obj 一样使用我的函数并将其命名为 $var->getTotalPrice();

    【讨论】:

    • 短一点:$total = $orders->pluck('product')->sum('price');
    【解决方案3】:

    在 Laravel 6+ 中我们可以这样使用,非常直接

    $total = $order->product->sum('price');
    

    【讨论】:

      【解决方案4】:

      使用没有DB的雄辩模型

      Product::with(['orders' => function($query){
         $query->sum('price');
      }])->get();
      

      【讨论】:

      • 目标不是得到产品,而是产品有这些价格要汇总的订单
      猜你喜欢
      • 2018-06-15
      • 2018-09-27
      • 2017-12-24
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多