Классы моделей в 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() );
}
}