Вы можете делать это как хотите. Модель не может иметь , ограниченную одной таблицей, вы можете ПРИСОЕДИНЯТЬСЯ, ОБЪЕДИНЯТЬ и ОБНОВЛЯТЬ любую таблицу, которая вам нравится, откуда угодно.
В дополнение к предложениям Донни Курнии, очень хорошая существующая модель MY_Model уже была написана Джейми Рамблоу (с некоторыми комментариями от меня самого), которая содержит несколько методов get, count, insert и т.д. Это позволяет вам выполнить большинство основных требований CRUD просто, создав пустую модель, которая расширяется от MY_Model.
Это отлично подходит для получения / вставки / удаления из одной таблицы, но когда дело доходит до создания методов, требующих объединения, лучше всего написать их самостоятельно.
При объединении таблиц вам необходимо установить WHERE на основе имен / псевдонимов таблиц, и вы найдете конфликтующие имена полей, если не будете осторожны, что означает, что создание общего решения для управления всеми запросами объединений из MY_Model будет ОЧЕНЬ ОЧЕНЬ трудно или просто беспорядок.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Tickets_m extends MY_Model
{
// Basic get, insert, delete stuff handled in MY_Model
function get_client_tickets($category_slug = '')
{
$this->db->select('t.*')
->select('c.title as category_title, c.slug as category_slug')
->select('p.name as priority_name')
->join('categories c', 'c.id = t.category_id')
->join('priorities p', 'p.id = t.priority_id')
->from('tickets t')
->where('c.client_id', CLIENT_ID);
if($category_slug)
{
$this->db->where('c.slug', $category_slug);
}
return $this->db->get()->result();
}
function get_client_ticket($id)
{
$this->db->select('t.*')
->select('c.title as category_title, c.slug as category_slug')
->select('p.name as priority_name')
->join('categories c', 'c.id = t.category_id')
->join('priorities p', 'p.id = t.priority_id')
->from('tickets t')
->where('c.client_id', CLIENT_ID)
->where('t.id', $id);
return $this->db->get()->row();
}
function insert($ticket)
{
$this->load->helper('date');
$ticket['created_on'] = now();
return parent::insert($ticket);
}
}
Вот пример очень простой модели, с которой я сейчас работаю, которая показывает, как я комбинирую использование MY_Model для get, get_by, insert, update с некоторыми пользовательскими методами, в которых есть объединения и дополнительные данные.
Вы также можете видеть, как я перегружаю insert (), чтобы автоматически добавлять дату создания без необходимости устанавливать ее в каждом контроллере, который может создавать или обновлять заявку.
Если вам нужно еще больше волшебного автоматического безумия столярного дела, попробуйте ORM с чем-то вроде Doctrine или DataMapper