如何在 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 中获取活动记录插入的结果

如何使用 CodeIgniter 3 中的外键从表中获取列数据

PHP-CODEIGNITER如何在会话中获取数据

如何使用codeigniter从mysql中获取多个多维数组中的数据?

如何根据codeigniter中的时间戳获取数据?