对如何实现目标完全困惑——我有三个表;
- 订单
- 项目
- 产品
订单表包含订单的详细信息,项目表包含产品id号和订单id号,产品表包含所有产品详细信息。
我想做的是有一个"我的订单"页面,在那里你可以查看你过去的所有订单,我希望能够有以下结构。。。
订单
订单号1
- 订单项目示例
- 订单项目的第二个示例
- 第三个订单项目示例
订单号2
- 订单项目示例
- 订单项目的第二个示例
- 第三个订单项目示例
订单号3
- 订单项目示例
- 订单项目的第二个示例
- 第三个订单项目示例
现在我可以很容易地列出所有的订单,也可以列出特定订单上的所有项目,但我不知道如何以上面的格式列出这三个表,我假设我可以对所有三个表进行JOIN,但我无法以接近正确的方式输出它们。
有人知道做这件事的好方法吗?非常感谢。
您可以使用联接查询来获取所有订单及其商品
/* raw sql query */
SELECT o.*,p.*,o.id AS order_id,p.id AS product_id
FROM Orders o
LEFT JOIN Items i ON (o.id=i.order_id)
LEFT JOIN Products p ON(p.id = i.product_id)
ORDER BY order_id
在您的模型中创建一个函数,并运行以下查询
/* Using Active record */
$orders=$this->db->select('o.*,p.*,o.id AS order_id,p.id AS product_id')
->from(' Orders o ')
->join(' Items i','o.id=i.order_id','LEFT')
->join(' Products p','p.id = i.product_id','LEFT')
->order_by('order_id')
->get()
->result();
从控制器中的模型中获取结果,然后将其传递给视图,在视图中,您可以将查询记录循环为
$currentParent = false;
foreach ($orders as $o) {
if ($currentParent != $o->order_id) {
echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1>';
$currentParent = $o->order_id;
}
echo '<p>' . htmlentities($o->product_name) . '</p>';
}
这将作为输出
<h1>ORDER NUMBER 1</h1>
<p>product 1</p>
<p>product 2</p>
<h1>ORDER NUMBER 2</h1>
<p> product 3</p>
如果你有不同的html结构,相应地改变它,我已经提供了上面的例子,使用标题和段落标签
编辑在您的中使用列表标签。您可以这样做
echo '<ul><li>';
$currentParent = false;
foreach ($orders as $o) {
if ($currentParent != $o->order_id) {
if ($currentParent != false) {
echo '</ul></li><li>';
}
echo '<h1>ORDER NUMBER ' . $o->order_id . '</h1><ul>';
$currentParent = $o->order_id;
}
echo '<li>' . htmlentities($o->product_name) . '</li>';
}
echo '</li></ul>';
这将作为输出
<ul>
<li>
<h1>ORDER NUMBER 1</h1>
<ul>
<li><p>product 1</p></li>
<li><p>product 2</p></li>
</ul>
</li>
<li>
<h1>ORDER NUMBER 2</h1>
<ul>
<li><p> product 3</p></li>
</ul>
</li>
</ul>