Im building a simple buy and sell application with Laravel 5.1. Each Buy Model has many BuyDetail which stores bought item quantity and buy_price. I have implement the relationship between table on the Model.

class Buy extends Model
{
  #Eloquent relationships

  public function supplier()
  {
    return $this->belongsTo('App\Supplier');
  }

  public function buyDetails()
  {
    return $this->hasMany('App\BuyDetail');
  }
}

我想计算每次购买的总价格.使用Eloquent 的ORM计算总价的最佳方法是什么?

for now i just implement it like this:

@foreach($buys as $key => $value)
    <?php
        $total = 0;
    ?>
    @foreach($value->buyDetails as $k => $bD)
        <?php
            $total += ($bD['buy_price']*$bD['qty']);
    ?>
    @endforeach

   <tr>
    <td>{{$value->ref_number}}</td>
    <td>{{$value->suplier->name}}</td>
    <td>{{$value->created_at}}</td>
    <td>{{$value->buyDetails->count()}}</td>
    <td>{{$total}}</td>
    <td>
        <a href="" class="btn btn-default btn-sm" title="show">Detail</a>
        <a href="" class="btn btn-primary btn-sm" title="edit">Edit</a>
        <a href="" class="btn btn-danger btn-sm" title="delete">Delete</a>
    </td>
  </tr>
@endforeach

推荐答案

这可以通过(至少)两种方式实现.

Using pure Eloquent model logic:

class Buy extends Model
{
  public function getTotalPrice() {
    return $this->buyDetails->sum(function($buyDetail) {
      return $buyDetail->quantity * $buyDetail->price;
    });
  }
}

这里唯一的问题是,它需要从数据库中获取所有buy详细信息,但无论如何都需要获取这些信息才能在视图中显示详细信息.

如果希望避免从数据库中提取关系,可以手动构建查询:

class Buy extends Model
{
  public function getTotalPrice() {
    return $this->buyDetails()->sum(DB::raw('quantity * price'));
  }
}

Laravel相关问答推荐

当使用Craftable PRO时,Wysiwig是什么时候生成的?

如何使用PHP版本8.2.6安装beyondcode/laravel-websockets软件包?

如何返回Blade Laravel 中的按钮?

根据路径的开头重定向

如何自定义密码确认不匹配.错误信息?

如何在数据来自Rest API的flutter中创建下拉类别名称列表?

如何在 Laravel Passport 中获取刷新令牌?

Laravel - 加载常见的页眉和页脚以查看

如何在 Laravel 5.5 中扩展 vendor 包服务提供者

在 laravel 中更改时区

Laravel 4,如何测试复选框是否被选中?

Laravel 5 - Php artisan语法错误

调用未定义的方法 Maatwebsite\Excel\Excel::load()

Laravel 无法创建根目录

防止 Eloquent 查询上的模型水合

嘲笑没有匹配的关闭处理程序

Laravel 在保存前生成 slug

无法打开laravel.log:无法打开流

Laravel 单元测试依赖注入

如何在脚本文件中使用 Laravel Blade?