您可以使用連接查詢來獲取所有的訂單與他們的項目
/* 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>';
}
Thi遺囑輸出
<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>
好這樣做的方式是使用Codeigniter實現Datamapper,因此您可以非常輕鬆地設置您的關係。這樣你可以創建一個訂單對象並獲取連接的數據。否則,編寫你自己的SQL查詢,確實是用一些連接。 – Fven
感謝您的幫助!我一定會考慮Datamapper,我還沒有使用ORM,所以有很多學習要做! –