完全混淆了如何实现某些目标 - 我有三张桌子;
订单表包含订单的详细信息,items表包含产品ID编号和订单ID编号,products表包含所有产品详细信息。
我要做的是拥有一个“我的订单”页面,您可以在其中查看所有过去的订单,以及我希望能够拥有以下结构......
订单
订单号1
订单号2
订单号3
现在我可以轻松列出所有订单,我可以列出特定订单上的所有项目,但我迷失了如何合并这三个表格,我可以用上面的格式列出它们,我假设我可以加入所有这三个,但我无法让它们以接近正确的方式输出。
有人知道这样做的好方法吗?非常感谢提前。
答案 0 :(得分:1)
您可以使用已加入的查询来获取所有订单及其商品
/* 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>