【问题标题】:For loop with two database queries in Twig在 Twig 中使用两个数据库查询的 For 循环
【发布时间】:2016-06-18 00:18:24
【问题描述】:

如果有人可以提供帮助,我真的很高兴,我正在尝试找出一种方法来循环遍历 Twig 中的两个查询。我可以在 PHP 中创建它,但我在 Twig 上做同样的事情。这就是我通常在 PHP 上的做法:

foreach($items as $item){
   $product_id = $item;
   $products = $app->db->table('products')->where('id', $product_id)->first();
   echo "<li>" . $products->title . "</li>";
}

上面的代码可以正常工作,但在 Twig 上它不会循环到下一个循环,但它会继续循环同样的事情。 如果您知道如何像上面使用的那样使用 Twig for 循环,请提供帮助。我在 Slim 中使用 Laravel Eloquent 查询它。

这就是我所做的:

控制器

$products = $app->db->table('products')->where('trash', '0')->first();

观点

{% for item in items %}
      {% set product_id = item.id %}
       <li> {{ products.title }}</li>
{% endfor %} 

它只会显示第一行并重复相同的内容。

【问题讨论】:

  • 请分享您的 Twig 代码?

标签: php laravel eloquent slim twig-extension


【解决方案1】:

不要尝试从模板运行查询。在控制器中执行此操作并将结果传递给模板。

另外,$items 似乎是一个 ID 数组,因此您应该能够使用 where-in 条件(而不是多个查询)一次加载所有产品:

控制器:

$products = $app->db->table('products')->whereIn('id', $items)->get();

// pass $products to the template as "products"

树枝模板:

{% for product in products %}
    <li>{{ product.title }}</li>
{% endfor %}

【讨论】:

  • 感谢您的回答,我正在尝试运行两个查询 $items 一个从控制器中的第一个查询解码的 json,以及 $products 我只想查询它工作的产品中的第一行在 php 中很好,但在 twig 中仅适用于第一个查询而不是下一个循环。
  • 实际上,您也不应该在控制器级别运行查询,而应该在数据层中运行查询,即“模型”理想地使用服务从控制器中抽象数据层
  • @DaGhostmanDimitrov 扩展这个想法,您应该在模型中使用traits 来处理与发生实际数据操作的ModelRepository 的交互。这使得在运行单元测试时可以通过服务层访问整个例程。超级重要。
  • 非常感谢你们成功了。我想我会继续使用 Twig。
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2016-06-17
  • 2014-01-17
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多