Как получить реляционные данные в CodeIgniter - PullRequest
1 голос
/ 11 апреля 2019

Мне нужно получить две реляционные таблицы с помощью метода foreach в CodeIgniter.Это только примеры кодов, которые я привожу в своем вопросе, мне, безусловно, понадобится это для моих будущих проектов, и я совершенно не знаю, какой запрос сделать это.

Вот покупатель таблица:

+----+------+
| 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>

Из приведенных выше кодов была показана только вся строка товаров стол.Я хочу получить результат, похожий на этот:

  +------+------------+
  | John | : • Apple  |
  |      |   • Grape  |
  +      +   • Banana +
  |      |            |
  + Jane + : • Pear   +
  |      |   • Mango  |
  +------+------------+

Извините за мой плохой английский.Есть идеи?

1 Ответ

2 голосов
/ 11 апреля 2019

В контроллере сделать это:

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>
...