Intereting Posts
Как создать XML-файл со специальными символами Ошибка: предупреждение: создание объекта по умолчанию из пустого значения Проблема отправки дополнительных сообщений на сервер с добавлением Временная метка не работает с базами данных ORM и PostgreSQL PHP. Каков хороший способ создать короткую буквенно-цифровую строку из длинного хэша md5? PHP-форум, который легко интегрируется с существующим веб-сайтом? Деление на нулевую ошибку в WordPress Theme Соединение между PHP и SQL-сервером с использованием новых атак WAMP Charset в XML-выходе из SQL .. немецких символов .. где я иду не так? Задайте задание PHP cron на сервере Windows 2003 $ mysqli-> fetch_object ($ result) не работает Как ограничить элементы из цикла while Facebook PHP SDK Graph API сообщение на страницу не работает должным образом Троянский код, встроенный в мои страницы веб-сайта. В чем смысл этого кода? login / logout не работает php правильно

Использование моделей в CodeIgniter

Может ли кто-нибудь объяснить мне, когда хорошая практика использования моделей в CI? Статья в википедии ссылалась на модели CI как «полностью факультативные и редко нужны», так или иначе?

Solutions Collecting From Web of "Использование моделей в CodeIgniter"

Скажем, вам нужно вызвать функцию get_user_info которая извлекает информацию о пользователях из базы данных. У вас может быть такая функция:

 class Home extends Controller { function __construct() { parent::__construct(); } function index() { $user = $this->get_user_info($_SESSION['user_id']); echo "Hello " . $user['first_name']; } function get_user_info($user_id) { $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id)); return $query->row_array(); } } 

Однако, что, если вам нужно было вызвать get_user_info на другой странице?

В этом случае вам придется копировать и вставлять функцию на каждую страницу, что затрудняет ее поддержку, если у вас много страниц (что, если вам нужно изменить запрос на JOIN на другую таблицу?)

Это также противоречит принципам, не повторяющим себя .

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

 class User extends Model { function __construct() { parent::Model(); } function get_user_info($user_id) { $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id)); return $query->row_array(); } } 

В приведенном выше примере мы создали модель под названием user . В нашем домашнем контроллере мы теперь можем изменить код следующим образом:

 class Home extends Controller { function __construct() { parent::__construct(); } function index() { $this->load->model('user'); $user = $this->user->get_user_info($_SESSION['user_id']); echo "Hello " . $user['first_name']; } } 

И теперь вы можете изменить свою функцию get_user_info не изменяя количество X контроллеров, которые полагаются на одну и ту же функцию.

Нет !! Это не правда. Модели используются в качестве слоя между вашим контроллером и базой данных. Лучшая практика MVC в лучшем случае является субъективной. Люди используют его по-разному. Рамка, подобная CodeIgniter, великолепна, потому что она обеспечивает такой уровень гибкости. Другие рамки гораздо более строгие. Я генерал, я стараюсь, чтобы мои контроллеры были очень маленькими и специфичными, и добавляли в модель много кода (взаимодействие с db и результаты анализа и т. Д.).

Ну, «модельные» данные о рецензентах, скорее всего, из базы данных (что означает, что ваши строки возвращаются из базы данных, а модель содержит данные отправки, просто сказано). Нет необходимости использовать уровень базы данных, заданный CI – это правда – вы можете заменить другим, если хотите, но что они «редко используются» просто не соответствуют действительности.

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

Возможно, статья относится к классу активной записи, который является необязательным для использования в моделях. Активная запись, которую я считаю полезной для создания, обновления и удаления, но вам, скорее всего, понадобится sql для любых слегка сложных чтений. Стоит отметить, что это не просто базы данных, которые вы можете использовать в моделях. В модели могут использоваться веб-службы или плоские файлы или любой другой источник данных.

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

Существует принцип, называемый «fat model / skinny controller», который вы, возможно, хотели бы взглянуть на это, говорит о том, что вес вашей обработки должен быть выполнен в файлах моделей, как против контроллеров. Это подтверждается тем, что вы не повторяете принцип, описанный выше, а также способствуете повторному использованию.

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

Этот вопрос получает много разговоров в Интернете, поэтому есть много информации, чтобы посмотреть, но, похоже, на платах Code Igniter рекомендуется более опытные пользователи.

Я должен добавить, что «совершенно необязательный и редко нужен», как правило, не так, я бы сказал, что это просто неправильно в чем угодно, кроме самых простых случаев – самые простые случаи – это статические страницы, которые не интегрируются с базой данных и просто состоят из нескольких загруженных представлений, но даже тогда использование модели с функцией для извлечения общего набора представлений для каждой страницы было бы целесообразным.

Модели для бизнес-логики (в идеальных случаях .. могут быть для дебатов, некоторые люди ставят логику логики в контроллере) и связность БД в структуре MVC.

Прочтите руководство пользователя codeigniter для получения дополнительной информации о моделях.

http://codeigniter.com/user_guide/general/models.html

У этой моей большой модели много методов.

  class Shortcode_model extends CI_Model { public function __construct() { parent::__construct(); $this -> load -> library('session'); } /** * Misc functions */ /** * read keyword . * * @return void * @author Chinthaka **/ public function read($id) { $this -> db -> select(); $this -> db -> from('short_code'); $this -> db -> where('id', $id); $query = $this -> db -> get(); $result = $query -> row(); $shortcode = new stdClass(); $shortcode->id = $result->id; $shortcode->code = $result->code; $shortcode->aggregator = $result->aggregator; $shortcode->mo_pp_id = $result->mo_pp_id; $shortcode->mt_free_pp_id = $result->mt_free_pp_id; $shortcode->mt_bill_pp_id = $result->mt_bill_pp_id; $shortcode->partner_role_id = $result->partner_role_id; $shortcode->partner_role_pass = $result->partner_role_pass; $shortcode->product_id = $result->product_id; $shortcode->billable = $result->billable; // $shortcode->created = $result->created; // $shortcode->changed = $result->changed; $shortcode->status = $result->status; //print_r($shortcode); return $shortcode; } public function read_operator($telco_id){ $this -> db -> select(); $this -> db -> from('operator'); $this -> db -> where('telco_id', $telco_id); $query = $this -> db -> get(); $result = $query -> row(); $operator = new stdClass(); $operator->id = $result->id; $operator->code = $result->telco_id; $operator->name = $result->telco_name; return $operator; } /** * create keyword . * * @return void * @author Chinthaka **/ public function create($arr_data) { $this -> db -> insert('short_code', $arr_data); //$stock['stock_id'] = $this->db->insert_id(); //return $query->result(); //return $keywords; } /** * update keyword . * * @return void * @author Chinthaka **/ public function update($arr_data) { $this -> db -> where('id', $arr_data['id']); $this -> db -> update('short_code', $arr_data); } /** * delete keyword . * * @return void * @author Chinthaka **/ public function delete($id) { $this -> db -> where('id', $id); $this -> db -> delete('short_code'); } /** * get all enabled shortcodes stored in the database. * * @return $shortcodess * @author Chinthaka **/ public function all_enable_shortcodes() { $this -> db -> select(); $this -> db -> from('short_code'); $this -> db -> where('status', 'enable'); $this -> db -> order_by("code"); $query = $this -> db -> get(); $result = $query -> result_array(); //echo mysql_num_rows($result); $shortcodes = array(); foreach ($result as $row) { $shortcode = $this -> read($row['id']); array_push($shortcodes, $shortcode); } /*while($data = $this->db->call_function('fetch_row', $result )) { $shortcode = $this->read($data['id']); array_push($shortcodes,$shortcode); }*/ return $shortcodes; } /** * check shortcode is exist. * * @return boolean * @author Chinthaka **/ function is_exists($shortcode, $id = 0) { $this -> db -> where('code', $shortcode); if ($id > 0) { $this -> db -> where('id <>', $id); } $query = $this -> db -> get('short_code'); if ($query -> num_rows() > 0) { return true; } else { return false; } } public function get($short_code_id) { $query = $this->db->query('select * from short_code where id=?', array($short_code_id)); log_message('debug', $this->db->last_query()); return $query->row(); } }