如何在 CodeIgniter 中获取关系数据
Posted
技术标签:
【中文标题】如何在 CodeIgniter 中获取关系数据【英文标题】:How to fetch relational data in CodeIgniter 【发布时间】:2019-09-02 03:51:03 【问题描述】:我需要在 CodeIgniter 中使用foreach
方法获取两个关系表。这只是我在我的问题中提供的一个示例代码,我肯定会在我未来的项目中需要它,而且我完全不知道要执行什么样的查询。
这是买家表:
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Jane |
+----+------+
这是商品表:
+----+----------+------------+
| id | buyer_id | goods_name |
+----+----------+------------+
| 1 | 1 | Apple |
| 2 | 1 | Grape |
| 3 | 1 | Banana |
| 4 | 2 | Pear |
| 5 | 2 | Mango |
+----+----------+------------+
在我的模型文件mtest中:
public function buyer_list()
$this->db->select('*');
$this->db->from('buyer');
$query = $this->db->get();
return $query->result();
public function order_list()
$this->db->select('*');
$this->db->from('goods');
$this->db->join('buyer', 'buyer.id = goods.buyer_id', 'inner');
$query = $this->db->get();
return $query->result();
在我的控制器中:
public function index()
$this->load->model('mtest');
$data['buyer'] = $this->mtest->buyer_list();
$data['order'] = $this->mtest->order_list();
$this->load->view('example', $data);
在我的视图文件中示例:
<div id="container">
<?php foreach ($buyer as $buyer_list): ?>
<strong><?php echo $buyer_list->name ?></strong>:
<ul>
<?php foreach ($order as $order_list): ?>
<li><?php echo $order_list->goods_name ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
</div>
上面的代码只显示了整行 goods 表。我想要这样的结果:
+------+------------+
| John | : • Apple |
| | • Grape |
+ + • Banana +
| | |
+ Jane + : • Pear +
| | • Mango |
+------+------------+
对不起,我的英语不好。有什么想法吗?
【问题讨论】:
在您的foreach
循环中,您正在覆盖变量。
您已经在order
中拥有buyers
,因为您加入了表格,因此无需调用buyer_list()
函数。
【参考方案1】:
在控制器中这样做:
public function index()
$this->load->model('mtest');
$orders = $this->mtest->order_list();
$sortedOrders = [];
foreach($orders as $order)
$sortedOrders[$order->name][] = $order;
$this->load->view('example', [ "sortedOrders" => $sortedOrders ]);
在视图中:
<div id="container">
<?php foreach ($sortedOrders as $k=>$sortedOrder): ?>
<strong><?php echo $k ?></strong>:
<ul>
<?php foreach ($sortedOrder as $goods): ?>
<li><?php echo $goods->goods_name ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
</div>
【讨论】:
谢谢先生,它有效!但是你能在你的答案中解释每个代码的功能吗?我是菜鸟 放一个var_dump($sortedOrders);
看看嵌套数组的样子。
您最好进行更改并在浏览器中查看更改作为输出。这样,你会自动学习以上是关于如何在 CodeIgniter 中获取关系数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CodeIgniter 4 中保存到数据库后获取插入 ID
如何使用 CodeIgniter 3 中的外键从表中获取列数据