私はコードイグナイタープロジェクトを行っています。コードイグナイターは初めてですが、ある程度理解しています。ユニの簡単なアプリケーションを構築していますが、どのアイテムがどのカテゴリにあるかを表示しようとすると問題が発生します。
私のDB構造
|------------------| |--------------------| |---------------------------------|
| books | | book_categories | | book_linktable |
|------------------| |--------------------| |---------------------------------|
| book_id | | book_category_id | | book_linktable_book_id |
| book_name | | book_category_name | | book_linktable_book_category_id |
| book_description | |--------------------| |---------------------------------|
| book_grade |
| book_author |
| book_edition |
| book_publisher |
| book_price |
| book_image |
|------------------|
さて、私のモデルで結合を使用して、book_linktable から必要なデータを正常に引き出し、ビューで単純な foreach ループを使用して表示しました。
問題は、1 つの本が 2 つ以上のカテゴリに属している場合、book_linktable で次のようになることです。
|------------------------|---------------------------------|
| book_linktable_book_id | book_linktable_book_category_id |
|------------------------|---------------------------------|
| 1 | 1 |
| 1 | 2 |
|------------------------|---------------------------------|
(したがって、ここではブック 1 はカテゴリ 1 と 2 に属します)
ただし、ここに問題があります。ビューで foreach ループを実行すると、以下のように 2 つの異なるブックとして表示されます。
|Name | Grade | Price | Categories |
|---------------------------------------|
|Book1 | Grade 1 | £7.00 | Announcement |
|Book1 | Grade 1 | £7.00 | Event |
本が何度も表示されるのではなく、本が配置されているさまざまなカテゴリをエコーする方法を見つける必要があるだけです。このようなもの:
|Name | Grade | Price | Categories |
|----------------------------------------------|
|Book1 | Grade 1 | £7.00 | Announcement, Event |
ここに私のモデル関数があります:
function get_books(){
$this->db->select('books.book_id, books.book_name, books.book_grade, books.book_edition, books.book_price, book_categories.book_category_id, book_categories.book_category_name');
$this->db->from('book_linktable');
$this->db->join('books', 'book_linktable.book_linktable_book_id = books.book_id');
$this->db->join('book_categories', 'book_linktable.book_linktable_book_category_id = book_categories.book_category_id');
$query = $this->db->get();
return $query->result();
} //function get_books()
これが私のコントローラー機能です:
function books($condition = FALSE){
if($condition === TRUE OR $this->admin_model->logged_in() === TRUE)
{
$data = $this->admin_model->display();
$data['query'] = $this->admin_model->get_books();
$data['page_title'] = 'Books';
$this->load->view('admin_section/books/main', $data);
}
else
{
$this->load->view('admin_section/details');
}
} //function books()
ビュー内の私の foreach は次のとおりです。
<?php
foreach($query as $row) {
echo "<tr>";
echo "<td>" . $row->book_name . "</td>";
echo "<td>" . $row->book_grade . "</td>";
echo "<td>" . $row->book_edition . "</td>";
echo "<td>" . "£" . $row->book_price . "</td>";
echo "<td>" . $row->book_category_name . "</td>";
echo "<td>" . anchor('books_admin/edit_book/' . $row->book_id, img(array('src'=>'/sys_icons/edit.png','border'=>'0','alt'=>'Edit'))) . " ";
echo "<td>" . anchor('books_admin/delete_book/' . $row->book_id, img(array('src'=>'/sys_icons/delete.png','border'=>'0','alt'=>'Delete', 'class' => 'delete_book'))) . "</td>";
echo "</tr>";
}
?>
どんな助けでも大歓迎です
ありがとう、トム