instancia codeigniter de clase de modelo

Estoy desarrollando un sitio con codeigniter. Ahora, normalmente cuando usas una clase en codeigniter, básicamente la utilizas como si fuera una clase estática. Por ejemplo, si dirijo un modelo llamado ‘usuario’, primero lo cargaba usando

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

y que, podría invocar métodos en esa clase de usuario como

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

En la aplicación que estoy construyendo, me gustaría tener una clase UserManagement, que utiliza una clase llamada ‘usuario’.

para que, por ejemplo, yo pudiera

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

y esto devolvería una instancia del modelo de usuario donde está el id. 3. ¿Cuál es la mejor manera de hacerlo?

Las clases modelo en CI no son exactamente lo mismo que las clases modelo en otras syntax. En la mayoría de los casos, los modelos serán en realidad una especie de objeto simple con una capa de base de datos que interactúa con él. Con CI, por otro lado, Model representa la interfaz de capa de la base de datos que devuelve objetos generics (en cierto modo son como matrices). Lo sé, me siento mintió también.

Por lo tanto, si desea que su Modelo devuelva algo que no sea stdClass , debe ajustar la llamada a la base de datos.

Entonces, esto es lo que haría:

Cree un user_model_helper que tenga su clase de modelo:

 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. */ } } 

En 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() ); } } 

Utilice patrones abstractos de fábrica o incluso patrones de objetos de acceso a datos que hagan el trabajo que requiera.

 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); } }