SQL и CodeIgniter

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

На данный момент у меня есть 4 таблицы:

  1. Книги
  2. Теги
  3. BooksTags (соответствует bookid тегу)
  4. Коллекции (коллекция серий)

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

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

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

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

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

Спасибо!


person Community    schedule 07.08.2009    source источник


Ответы (2)


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

$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; ?>

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

person rayed    schedule 07.08.2009
comment
Я 2-й предложение «перейти к модели». - person arbales; 07.08.2009
comment
Я ценю помощь. Я все еще изучаю структуру CI и просто читаю о моделях. Я также не знал о -›результате. Спасибо!! - person ; 07.08.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 ...

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

person stef    schedule 14.08.2009