我试图从数据库中创建一个订单摘要,数据库中的每一行包含一个单独的行,每个项目,并通过一个订单号连接在一起,例如。
| 订单号|项目|客户名称|
| --|--|--|
| 订单001|小部件|Joe Bloggs|
| 订单001| thingy| Joe Bloggs|
| 订单002|小部件|弗雷德·燧石族|
我试图创建的是一个单一页面上的每个订单号的摘要,所以它看起来像这样:-
| 订单号|订单001|
| --|--|
| 客户名称|Joe Bloggs|
| 项目|小部件|
| 项目|thingy|
| 订单号|订单002|
| --|--|
| 客户名称|弗雷德·燧石族|
| 项目|小部件|
我可以在一定程度上使用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>";
}
}
字符串
我的问题是,当我尝试将相同的变量传递给视图时,它只显示循环中的最后一个命令,在这个例子中是ord 002,这让我感到困惑,这是我的视图。
<?php foreach ($orders as $order) { ?>
<?= h($order->item) ?>
<br >
<?php } ?>
<?= h($order->customer_name) ?>
型
1条答案
按热度按时间vsmadaxz1#
每次调用
$this->set(compact('orders'));
时,您都是$orders
(在视图中)你应该尝试在你的视图中(而不是在控制器中)有每个输出逻辑。在你的控制器中获取你的数据(使用
HasMany
关系和->contain()
)。在视图中循环浏览客户和订单。
在循环中执行SQL查询通常不是性能的最佳解决方案。
另外,尽量避免在循环中使用
$this->set()
。这很容易出错,也很难调试。相反,在数组或对象中获取数据,并在控制器操作结束时将其传递给视图的单个$this->set()
调用。