#php #mysql #codeigniter #foreach #fetch
#php #mysql #codeigniter #foreach #извлекать
Вопрос:
Мне нужно получить две реляционные таблицы с 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. В ваших
foreach
циклах вы перезаписываете переменные.2. У вас уже есть
buyers
вorder
, потому что вы присоединились к таблицам, поэтому нет необходимости вызывать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>
Комментарии:
1. Спасибо, сэр, это работает! Но можете ли вы объяснить функцию каждого кода в вашем ответе? Я нуб
2. Поместите a
var_dump($sortedOrders);
, чтобы увидеть, как выглядит вложенный массив.3. Вам лучше вносить изменения и просматривать изменения в браузере в качестве выходных данных. Таким образом, вы научитесь автоматически