You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Laravel实现同一产品不同规格库存数量同行列展示的查询方法

嘿,作为Laravel新手能想到要做这样的数据透视表已经很棒啦!我来帮你一步步实现你想要的表格效果。

首先,我们需要把数据库里的原始数据按产品名称(比如Aqua、Liquid)分组,然后把不同容量(600ml、1000ml)的数量分别放到对应的列里,没有数据的地方填0。下面是具体的实现方法:

步骤1:编写Laravel查询语句

假设你的数据存在名为products的表中(如果表名不同,替换成你实际的表名即可),可以用Laravel的查询构造器来实现:

$productStats = DB::table('products')
    ->selectRaw("
        ROW_NUMBER() OVER (ORDER BY base_name) as `No`,
        CONCAT(UPPER(LEFT(base_name, 1)), LOWER(SUBSTRING(base_name, 2))) as `name`,
        COALESCE(SUM(CASE WHEN name LIKE '%600ml%' THEN qty ELSE 0 END), 0) as `qty 600ml`,
        COALESCE(SUM(CASE WHEN name LIKE '%1000ml%' THEN qty ELSE 0 END), 0) as `qty 1000ml`
    ")
    ->selectRaw("SUBSTRING_INDEX(name, ' ', 1) as base_name")
    ->groupBy('base_name')
    ->orderBy('base_name')
    ->get();

我来解释下这段代码里的关键部分:

  • SUBSTRING_INDEX(name, ' ', 1):把name字段按第一个空格拆分,提取出基础产品名(比如从aqua 600ml得到aqua)
  • CONCAT(UPPER(LEFT(base_name, 1)), LOWER(SUBSTRING(base_name, 2))):把基础产品名转换成首字母大写的格式(aqua→Aqua,liquid→Liquid)
  • SUM(CASE ...):根据容量匹配对应的数量,没有匹配到的话就加0
  • COALESCE(..., 0):确保即使某个容量没有数据,也会显示0而不是空值
  • ROW_NUMBER():生成表格里的序号(1、2...)
  • GROUP BY base_name:按基础产品名分组汇总数据

步骤2:在Blade视图中渲染表格

拿到查询结果后,就可以在Laravel的Blade模板里循环输出表格了:

<table border="1" cellpadding="8" cellspacing="0">
    <thead>
        <tr>
            <th>No</th>
            <th>name</th>
            <th>qty 600ml</th>
            <th>qty 1000ml</th>
        </tr>
    </thead>
    <tbody>
        @foreach($productStats as $item)
        <tr>
            <td>{{ $item->No }}.</td>
            <td>{{ $item->name }}</td>
            <td>{{ $item->{'qty 600ml'} }}</td>
            <td>{{ $item->{'qty 1000ml'} }}</td>
        </tr>
        @endforeach
    </tbody>
</table>

注意:因为列名里有空格,所以要用$item->{'qty 600ml'}这种方式来访问对应的值哦。

这样就能得到你想要的表格效果啦!如果之后有更多容量类型需要处理,我们可以再调整成动态透视的方式,但当前这种静态写法对于新手来说更容易理解和维护。

内容的提问来源于stack exchange,提问作者Dwiky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:47:49