我正在尝试从数据库创建订单摘要,数据库中的每一行都包含每个项目的单独行,并通过订单号链接在一起。
订单号 | 项目 | 客户名称 |
---|---|---|
ord001 | 小工具 | 乔·布洛格斯 |
ord001 | 东西 | 乔·布洛格斯 |
ord002 | 小工具 | 弗莱德·打火石 |
我正在尝试创建的是单个页面上每个订单号的摘要,因此它看起来像这样:-
订单号 | ord001 |
---|---|
客户姓名 | 乔·布洛格斯 |
项目 | 小工具 |
项目 | 东西 |
订单号 | ord002 |
---|---|
客户姓名 | 弗雷德打火石 |
项目 | 小工具 |
我可以通过在控制器内使用 echo 来使其在一定程度上发挥作用 这是我的控制器:-
{
$tomorrow = date("Y-m-d", strtotime('tomorrow'));
$customer = $this->Customer->find()
->select(['order_number' => 'DISTINCT order_number'])
->where(['Customer.del_date LIKE' => $tomorrow])
->where (['Customer.van_number LIKE' => '2 - Internet Van']);
$this->set('customer',$customer);
foreach ($customer->all() as $order) {
$ordnumber = ($order->order_number);
echo $ordnumber."<br />";
$orders = ($this->Customer->find()
->where(['order_number' => $ordnumber])
);
$this->set(compact('orders'));
foreach ($orders as $order) {
echo $order->item."<br />";
}
echo $order->customer_name."<br />";
echo "<hr>";
}
}
我的问题是,当我尝试将相同的变量传递给视图时,它只显示循环中的最后一个订单,在本例中是 ord002,这让我感到困惑,这是我的视图
<?php foreach ($orders as $order) { ?>
<?= h($order->item) ?>
<br >
<?php } ?>
<?= h($order->customer_name) ?>
您正在覆盖
$orders
(在您看来)每次调用 $this->set(compact('orders'));
您应该尝试将每个输出逻辑都放在视图中(而不是控制器中)。在控制器中获取数据(利用
HasMany
关系和 ->contain()
)。
在您的视图中循环浏览您的客户和订单。
在循环中执行 SQL 查询通常不是提高性能的最佳解决方案。
还要尽量避免在循环中使用 $this->set() 。只是容易出错且难以调试。