【问题标题】:Laravel How to create One Query in order to Produce Multiple Foreach on ViewLaravel 如何创建一个查询以在视图上生成多个 Foreach
【发布时间】:2019-12-08 15:46:34
【问题描述】:

为了提高性能,我尝试只创建一个对 db 的查询并在视图刀片中显示多个 foreach。为了产生这个结果,我的方法是使用查询生成器和 selectRaw 来创建过滤器。

我当前的代码:

$totals = DB::table('product')->select('productName','sellingPrice','productSpecification')
            ->selectRaw("(case where categoryId = '177' then 1 end) as computers")
            ->selectRaw("(case where categoryId = '31388' then 1 end) as cameras")
            ->selectRaw("(case where categoryId = '9355' then 1 end) as mobiles")
            ->get();
    }

这个想法是在刀片视图中以以下方式使用 selectraw:

@foreach ($totals->computers as $productcomputers)

@foreach ($totals->cameras as $productcameras)

@foreach ($totals->mobiles as $productmobiles)

我尝试了该方法,但收到错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 'where 附近使用正确的语法 categoryId = '177' then 1 end) 作为计算机

有什么建议可以在 laravel 中生成一个带有多个 foreach 的查询或解决当前的方法吗?

brgds,

【问题讨论】:

  • 您希望在这里得到computerscamerasmobiles 的值?
  • @Rwd 的想法是对多个 foreach 仅使用一个查询。现在我有一个视图,对同一个表有多个查询,每个查询产生一个 foreach。我想创造更好的表现。
  • @Rwd 我从 Reinik 那里获得了使用条件 reinink.ca/articles/…987654321@ 计算总数的想法
  • 所有这些都是聚合,例如counts 无论如何你都不会循环。
  • @Rwd 好的,谢谢。那是我的问题,是否有可能解决这种方法或创建一种新方法。我将朝着不同的方向努力。非常感谢!

标签: php laravel eloquent


【解决方案1】:

试试这个

$totals = DB::table('product')->select('productName','sellingPrice','productSpecification')
            ->whereIn('categoryId', [177, 31388, 9355])
            ->selectRaw("(case when categoryId = '177' then 1 end) as computers")
            ->selectRaw("(case when categoryId = '31388' then 1 end) as cameras")
            ->selectRaw("(case when categoryId = '9355' then 1 end) as mobiles")
            ->get();

        $data = collect();
        $data->computers = $totals->where('computers', '!=', null);
        $data->cameras   = $totals->where('cameras', '!=', null);
        $data->mobiles   = $totals->where('mobiles', '!=', null);

现在在刀片视图中使用

@foreach ($data->computers as $productcomputers)

@foreach ($data->cameras as $productcameras)

@foreach ($data->mobiles as $productmobiles)

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    case where 替换为case when。 你可以在this link查看文档。

    【讨论】:

    • 感谢@bram-verstraten:当适用于 sql 时,现在我收到“此集合实例上不存在属性 [计算机]”但来自 laravel。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多