提问者:小点点

一对多关系的总价(laravel)


我有一对多关系的问题!因此,我尝试将产品价格相加,我的意思如下:

型号:产品。php

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

型号:Orders.php

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

所以我想让smth像这样:$var-

我的数据库(如果需要):

订单:id产品| id |用户| | |-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|

产品只有4列:id、名称、价格、描述

我的意思是:

 products:

  id\1

  name\productname

  price \1.00USD

  id\2

  name\productname2

  price \1.00USD

它必须返回所有产品的总和,因此必须返回2.00美元

@乔纳斯·斯塔德梅尔


共3个答案

匿名用户

试试这个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();

匿名用户

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

我像以前一样使用当前关系,并按顺序执行该函数。php模型

public function getTotalPrice() {

$orders = self::with('product')->get();

$total = 0;

foreach($orders as $order) {
 $total += $order->product->price;
} 

return $total;
}

现在我可以使用像obj这样的函数,并将其称为$var-

匿名用户

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

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