Модель Codeigniter - PullRequest
       4

Модель Codeigniter

0 голосов
/ 20 сентября 2011

У меня есть вопрос о MY_Model Джейми Рамбелоу и моделях в целом.MY_Model предоставляет защищенную переменную, которая содержит имя таблицы.Я хочу использовать это, но я хочу, чтобы моя модель обрабатывала 3 таблицы.Итак, я думаю, мой вопрос: может ли модель обрабатывать более одной таблицы?Это хорошая практика или лучше иметь модель для каждой таблицы базы данных?

Ответы [ 2 ]

9 голосов
/ 27 апреля 2012

По умолчанию MY_Model не поддерживает несколько таблиц, однако вы можете очень легко создавать методы - я люблю называть их областями - для эффективного и элегантного связывания с другими таблицами.

Допустим, у нас есть post_model.php , который должен извлечь данные из таблицы category . Я предполагаю, что мы хотим ввести наше category.name на основе post.category_id .

class Post_model extends MY_Model
{
    public function with_category()
    {
        $this->db->join('categories', 'categories.id = post.category_id', 'left');
        $this->db->select('categories.name AS category_name');

        return $this;
    }
}

Затем мы можем использовать наш метод with_category() (связанный со всеми нашими встроенными MY_Model методами), чтобы получить информацию о нашей категории:

$this->post_model->with_category()
                 ->get_all();

или с get_by():

$this->post_model->with_category()
                 ->get_by('status', 'open');

Скоупинг - это крутой способ добавления других таблиц в ваши модели, при этом все еще используются все классные вещи MY_Model .

1 голос
/ 20 сентября 2011

Если вы хотите использовать MY_Model от Jamie Rumbelow без изменений, вы должны использовать только одну таблицу для каждой модели, так как она получает имя таблицы из имени модели. Как он представил, это базовая модель CRUD, вы можете расширить ее в соответствии с вашей ситуацией. Я думаю, что лучше всего использовать одну таблицу для каждой модели (не включая таблицы соединений, если они есть). Хотя иногда я пропускаю это в CodeIgniter, если некоторые вещи могут быть добавлены к той же модели логически и не слишком велики, чтобы нуждаться в их собственной модели. Например, есть модель комментариев, и вам нужны голоса только за комментарии. Я делаю это из-за лени - я ненавижу ручную загрузку модели в CI.

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