экземпляр codeigniter класса модели

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

$this->load->model('user'); 

и чем, я мог бы вызывать методы в этом пользовательском классе, например

 $this->user->make_sandwitch('cheese'); 

в приложении, которое я создаю, я хотел бы иметь один класс UserManagement, который использует класс под названием «пользователь».

так что, например, я мог бы

 $this->usermanager->by_id(3); 

и это вернет экземпляр модели пользователя, где id равен 3. Каков наилучший способ сделать это?

Solutions Collecting From Web of "экземпляр codeigniter класса модели"

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

Итак, если вы хотите, чтобы ваша модель возвращала то, что не является stdClass , вам нужно обернуть вызов базы данных.

Итак, вот что я сделал бы:

Создайте user_model_helper с классом модели:

 class User_model { private $id; public function __construct( stdClass $val ) { $this->id = $val->id; /* ... */ /* The stdClass provided by CI will have one property per db column. So, if you have the columns id, first_name, last_name the value the db will return will have a first_name, last_name, and id properties. Here is where you would do something with those. */ } } 

В usermanager.php:

 class Usermanager extends CI_Model { public function __construct() { /* whatever you had before; */ $CI =& get_instance(); // use get_instance, it is less prone to failure // in this context. $CI->load->helper("user_model_helper"); } public function by_id( $id ) { $q = $this->db->from('users')->where('id', $id)->limit(1)->get(); return new User_model( $q->result() ); } } 

Используйте абстрактный шаблон фабрики или даже шаблон объекта доступа к данным, который выполняет требуемое вами задание.

 class User extend CI_Model { function by_id($id) { $this->db->select('*')->from('users')->where('id', $id)->limit(1); // Your additional code goes here // ... return $user_data; } } class Home extend CI_Controller { function index() { $this->load->model('user'); $data = $this->user->by_id($id); } }