SQL и CodeIgniter - PullRequest
       9

SQL и CodeIgniter

1 голос
/ 07 августа 2009

В настоящее время я создаю систему инвентаризации книг с помощью CodeIgniter (я новичок в CodeIgniter), и мне бы хотелось, чтобы у каждой книги были теги.

В настоящее время у меня есть 4 таблицы:

  1. Книга
  2. Метки
  3. BooksTags (соответствует bookid to tagid)
  4. Коллекции (серия сборников)

В контроллере для основного вида, который покажет все книги, я называю это:

$this->db->select('*');  
$this->db->from('books'); 
$this->db->join('collections', 'collections.collectid= books.collectionid');
$data['query'] = $this->db->get();  

Объединение помогает мне получить коллекцию, к которой относится каждая книга.

Итак, в представлении я перебираю запрос, получаю все книги и отображаю их в виде таблицы. То, что я надеюсь сделать, это добавить строку под каждой книгой и поставить теги. У меня нет навыков работы с SQL, и я, как правило, просто добавляю несколько операторов select, но я хочу выполнять всю работу с контроллера. Я попытался сделать несколько разных вещей, но я не уверен, как получить все теги для каждой книги, пока она просматривается.

Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 07 августа 2009

Выполните цикл внутри контроллера, как:

$this->db->select('*');  
$this->db->from('books b'); 
$this->db->join('collections c', 'c.collectid= b.collectionid');
$books = $this->db->get()->result;
foreach($books as $book) {
     $this->db->select('*');  
     $this->db->from('Tags t'); 
     $this->db->join('BooksTags bt', 't.tagid= bt.tagid');
     $this->db->where('bt.bookid', $book->bookid);
     $book->tags = $this->db->get()->result;
}
$data['books'] = $books;

Тогда с точки зрения вы могли бы что-то вроде:

<?php foreach($books as $book): ?>
<?= $book->name ?>  has the following tags: 
  <?php foreach($book->tags as $tag): ?>
  <?= $tag->name ?>
  <?php endforeach; ?>
<?php endforeach; ?>

Вам также следует рассмотреть возможность переноса всего кода БД в модель.

0 голосов
/ 14 августа 2009

запросов принадлежат модели, поэтому сделайте это:

function get_books()
{
  $this->db->select('*');  
  $this->db->from('books b'); 
  $this->db->join('collections c', 'c.collectid= b.collectionid');
  return $this->db->get()->result;
}

тогда в вашем контроллере вы называете это как:

$books = $this->Model__name->get_books();

foreach ...

и код в представлении остается прежним:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...