【问题标题】:Laravel aggregate sum by id not showing on BladeLaravel 按 ID 汇总总和未显示在 Blade 上
【发布时间】:2020-12-25 02:24:48
【问题描述】:

我开发了一个库存管理系统,其中可以使用 products 表和 order_details 表。现在我想显示根据 product_id 售出的产品数量以及要在刀片模板循环上显示的总和数量。其中 Product 表 ID 等于 order_details product_id。但不幸的是,它没有显示。

产品控制器索引功能

public function index()
{
    $orderdetail = DB::table('order_details')
            ->select('quantity', DB::raw('sum(quantity) as sum'))
            ->groupBy('product_id')
            ->havingRaw('SUM(quantity)')
            ->get();

    $products = Product::latest()->with('category', 'supplier', 'orderdetail')->get();
    return view('admin.product.index', compact('products', 'orderdetail'));

}

产品模型

class Product extends Model
{

    protected $dates = [
        'buying_date', 'expire_date',
    ];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function supplier()
    {
        return $this->belongsTo(Supplier::class);
    }

    public function orderdetail()
    {
        return $this->belongsTo('App\OrderDetail', 'id', 'product_id');
    }
}

和剑

@foreach($products as $key => $product)
<tr>
    <td>{{ $key + 1 }}</td>
    <td>{{ $product->name }}</td>
    <td>
        <img class="img-rounded" style="height:35px; width: 35px;" src="{{ URL::asset("storage/product/".$product->image) }}" alt="{{ $product->name }}">
    </td>
    <td>{{ $product->category->name }}</td>
    <td>{{ $product->supplier->name }}</td>
    <td>{{ $product->code }}</td>
    <td>{{ $product->buying_date->toFormattedDateString() }}</td>
    <td>{{ number_format($product->buying_price, 2) }}</td>
    <td>{{ number_format($product->selling_price, 2) }}</td>
    <td>{{ $product->product_unit }}</td>
    <td>000000</td>
    <td>{{ $product->orderdetail->sum }}</td>
    <td>
        <div class="btn-group">
            <button type="button" class="btn btn-default">Click</button>
            <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
            <span class="caret"></span>
            <span class="sr-only">Toggle Dropdown</span>
            </button>
            <ul class="dropdown-menu" role="menu" style="min-width:auto">
            <li><a href="{{ route('admin.product.show', $product->id) }}">Show</a></li>
            <li><a href="{{ route('admin.product.edit', $product->id) }}">Edit</a></li>  
            </ul>
        </div>
        
    </td>
</tr>
@endforeach

但它什么也没显示。放置后

dd($orderdetail, $products);

它正在显示这个结果。

所以任何人都可以帮助解决这个问题。我无法在刀片上显示。

【问题讨论】:

  • 它显示的总数量列值不是根据 product_id 但我想要按 product_id 分组的总和值。

标签: laravel laravel-5 sum aggregate-functions laravel-blade


【解决方案1】:

你可以使用子查询:

$products = Products
    ::select(['products.*', 'sum' => DB
        ::table('order_details')
        ->selectRaw('sum(order_details.quantity)')
        ->whereColumn('products.id', 'order_details.product_id')
    ])
    ->with('category', 'supplier', 'orderdetail')
    ->get();

或者 join + group by(应该只在禁用ONLY_FULL_GROUP_BY选项的mysql中工作):

$products = Products
    ::selectRaw('products.*', 'sum(order_details.quantity)')
    ->leftJoin('order_details', 'order_details.product_id', '=', 'products.id')
    ->groupBy('products.id')
    ->with('category', 'supplier', 'orderdetail')
    ->get();

【讨论】:

  • 非常感谢您的回复。但我已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2015-07-26
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多