Как использовать модели в CodeIgniter? - PullRequest
0 голосов
/ 05 января 2011

Я вхожу в CodeIgniter и пытаюсь выяснить хорошую архитектуру для моих моделей. Какие модели вы бы создали для следующего простого примера:

  • страница списка записей в блоге: показывает часть данных записи, количество комментариев
  • страница записи в блоге: показывает все данные записи, список комментариев (с частью данных комментария)
  • страница комментариев: показывает все данные комментариев

Я пытаюсь сделать это правильно, чтобы оно было простым и эффективным. Я не хочу загружать слишком много информации (из БД) на страницы, где они мне не нужны.

например. должна ли одна и та же модель ввода обрабатывать как несколько записей, так и одну запись? И как комментарии должны быть загружены? Мне нужно только количество комментариев на странице с несколькими записями (списком), но некоторые данные комментариев на странице с одной записью. Как бы вы справились с этим?

Ответы [ 2 ]

0 голосов
/ 06 января 2011

Вы можете создать MY_Model, что-то вроде этого:

class MY_Model extends CI_Model {

    var $table  = '';//database table

    function __construct(){
        parent::__construct();
    }

public function get( $id = NULL ) {
        $query = $this->db->get_where($this->table, array('id' => (int)$id), 1, 0);
        if ($query->num_rows() === 1) {
             return = $query->result();
        }
        return NULL;
}

    function get_one($id=NUNLL){}

    function update($id=NULL, $data=array()){}

    function delete($id=NULL){}

    etc...

}

И затем в ваших моделях для таблицы вы можете расширить MY_Model, что-то вроде этого:

class My_Table_model extends MY_Model {

    function __construct(){
        parent::__construct();
        $this->table='my_table';
    }
}

Затем вы можете использовать методы из My_Model в ваших моделях.В вашем контроллере у вас может быть что-то вроде этого:

class Table_Controller extends Front_Controller {

    function __construct(){ 
        parent::__construct();
        $this->load->model('my_table_model');
    }

    function comments(){
        $this->my_table_model->get($get_id_somehow);
    }

} 

Если вы хотите переопределить что-то, вы можете сделать это так в своих моделях, которые расширяют My_Model:

function my_method($id=NULL, $data=array()){
    return parent::my_method($id, $data);
}
0 голосов
/ 05 января 2011

Да, ваша модель article_model должна обрабатывать все связанные запросы и логику для любой записи / статьи, однако для связанных комментариев я бы сделал другую модель, назовем ее comments_model.

Затем вы увидите, какие данные необходимо отобразить, и создадите методы для извлечения / обработки этих данных в ваших моделях.

Например.Для страницы записи в блоге вам понадобится метод get_entry в article_model и get_article_comments в модели комментариев, затем для страницы списка блога вам понадобятся get_entryes и get_article_number_of_comments в модели комментариев ....


Редактировать

Для страницы со списком 20 записей в блоге вам нужно будет сделать 1 запрос, чтобы вывести список всех записей в блоге, вызвав article_model-> get_entryes, а для вывода только 1 записи вы можете вызвать get_single_entry (или get_entryes, где вы ограничиваетерезультат, или get_entry_by_uri, или get_entry_by_id ...).Затем, чтобы получить количество комментариев для каждой записи, вы можете сделать get_multiple_nr_comment в модели комментариев, где вы передаете идентификаторы записей, и ваш запрос выдаст что-то вроде "где comments.entry_id IN (1, 34, 55 ...)"Существует несколько способов подсчета нескольких номеров комментариев в одном запросе.

Таким образом, в итоге у вас будет 2 запроса на страницу.

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