Я очень смущен в отношении того, какой метод использовать для кодирования модели в кодеигниторе.
Я много искал и нашел различные методы, используемые различными кодами. Просьба указать мне лучший способ написать Model Class с помощью codeigniter.
Немного примеров;
Некоторые принимают длинные параметры в сигнатуре метода
function insert_data($name, $address, $email, $....,$...,$..)
В то время как другие просто используют следующее и пишут все почтовые коды внутри модели.
function insert() { $name= $this->input->post('var1'); $name= $this->input->post('var1'); $name= $this->input->post('var1'); }
Некоторые создают разные модели для каждой таблицы, в то время как некоторые пишут очень мало моделей.
И еще много противоречий между разными разработчиками, я так сильно запутался, что технику можно использовать для написания более эффективного и отраслевого стандартного кода.
Пожалуйста, помогите мне. Спасибо большое.
Это хороший вопрос. Он восходит к плюсам и минусам Codeigniter. Будучи тем, что вы можете настроить Codeitgniter столько, сколько пожелаете (что многие люди переусердствовали), такие проблемы возникают, когда разработчик может решить, где они находятся. С учетом сказанного я расскажу, как я использую модели.
В соответствии со стандартами MVC Codeigniter:
Модель представляет ваши структуры данных. Обычно ваши классы моделей будут содержать функции, которые помогут вам получать, вставлять и обновлять информацию в вашей базе данных.
Поэтому модель должна обрабатывать только связь с вашей базой данных или если вы не используете базы данных, она должна обрабатывать извлечение данных из других источников (например, json, текстовые файлы и т. Д.).
Что я рекомендую:
$this->input->post()
. После того, как у вас есть все ваши данные post()
, создайте необходимый массив и передайте его в модель С помощью этой структуры вы можете повторно использовать эти методы модели с любых контроллеров, сохраняя модульную структуру.
Надеюсь это поможет.
это может помочь вам. (как я использую модель в codeigniter)
МОЙ МОДЕЛЬ PHP FILE:
<?php class Dbmodel extends CI_Model { function __construct() { parent::__construct(); $this->db->query("SET time_zone='+05:30'"); } function customQueryInsert($table, $array_data, $array_condition) { if (!empty($array_condition)) { $this->db->where($array_condition); } $result = $this->db->insert($table, $array_data); if ($result) { return TRUE; } else { return FALSE; } } function customQueryInsertGetId($table, $array_data, $array_condition) { if (!empty($array_condition)) { $this->db->where($array_condition); } $result = $this->db->insert($table, $array_data); if ($result) { return $this->db->insert_id(); } else { return FALSE; } } function lastQuery() { return $this->db->last_query(); } }
И ВЫЗОВ В КОНТРОЛЛЕРАХ:
$this->load->model('Dbmodel', 'Dbmodel', TRUE); $this->notification = $this->Dbmodel->customQuerySingleResult("select count(id) as ncount from notification where id='$this->id' and status='unread'", "ncount"); $this->Dbmodel->customQueryInsert("activity", array('userid' => $this->id, 'username' => $this->email, 'activity' => uri_string()), array());
так я использую MODEL в CODEIGNITER .. в вашем случае вы можете использовать ниже код для вставки ваших данных, предполагая, что вы пишете его внутри метода контроллера.
$this->load->model('Dbmodel', 'Dbmodel', TRUE); $status = $this->Dbmodel->customQueryInsert("table_name",array('column_name'=>'var1','column_two'=>'var2')); if($status){ //do succes stuffs }else{ //fail redirect... }
теперь вам не нужно создавать методы с требуемыми параметрами .. просто вызовите метод customQueryInsert
и передайте имя таблицы как первый параметр и массив column_name=>column_data
второму параметру …
вы можете оптимизировать его в соответствии с вашими потребностями .. или если вы хотите получить дополнительную помощь, пожалуйста, дайте мне знать ..
Если вы перейдете на http://www.codeigniter.com/ внизу, вы увидите
CodeIgniter поощряет MVC, но не заставляет его на вас.
Из вашего примера
function insert_data($name, $address, $email, $....,$...,$..)
лучше, чем function insert()
. Первый можно использовать повторно.
Предположим, вы хотите выполнить одну и ту же задачу с помощью метода get. В этом случае вам нужно написать другую функцию insert для get.but, 1-й можно повторно использовать, если вы передадите их с вашего контроллера.
$this->input->post
лучше использовать эту функцию в контроллере. Если вы используете ее в функции модели, это означает, что функция будет работать только там, где должны быть данные post.