Cakephp 4将子查询从控制器传递到视图

cwdobuhd  于 2023-11-19  发布在  PHP
关注(0)|答案(1)|浏览(206)

我试图从数据库中创建一个订单摘要,数据库中的每一行包含一个单独的行,每个项目,并通过一个订单号连接在一起,例如。
| 订单号|项目|客户名称|
| --|--|--|
| 订单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) ?>

vsmadaxz

vsmadaxz1#

每次调用$this->set(compact('orders'));时,您都是$orders(在视图中)
你应该尝试在你的视图中(而不是在控制器中)有每个输出逻辑。在你的控制器中获取你的数据(使用HasMany关系和->contain())。
在视图中循环浏览客户和订单。
在循环中执行SQL查询通常不是性能的最佳解决方案。
另外,尽量避免在循环中使用$this->set()。这很容易出错,也很难调试。相反,在数组或对象中获取数据,并在控制器操作结束时将其传递给视图的单个$this->set()调用。

相关问题