不确定最好的表达方式,所以请耐心等待。
在 Codeigniter 中,我可以毫无问题地返回我的对象的记录集,但它作为 stdClass 对象而不是作为“模型”对象(例如页面对象)返回,然后我可以使用它来使用该模型中的其他方法。
我在这里错过了一个技巧吗?或者这是 CI 中的标准功能?
不确定最好的表达方式,所以请耐心等待。
在 Codeigniter 中,我可以毫无问题地返回我的对象的记录集,但它作为 stdClass 对象而不是作为“模型”对象(例如页面对象)返回,然后我可以使用它来使用该模型中的其他方法。
我在这里错过了一个技巧吗?或者这是 CI 中的标准功能?
是的,基本上为了使它工作,您需要在类范围内声明您的模型对象属性,并引用$this
当前模型对象。
class Blogmodel extends CI_Model {
var $title = '';
var $content = ''; // Declare Class wide Model properties
var $date = '';
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_entry()
{
$query = $this->db->query('query to get single object');
$db_row = $query->row(); //Get single record
$this->title = $db_row->title;
$this->content = $db_row->content; //Populate current instance of the Model
$this->date = $db_row->date;
return $this; //Return the Model instance
}
}
我相信get_entry()
会返回一个对象类型Blogmodel
。
你不需要像这样的东西:
$this->title = $db_row->title; $this->content = $db_row->content; //Populate current instance of the Model $this->date = $db_row->date;
只需将结果()方法放入模型中:
result(get_class($this));
或者
result(get_called_class());
你会得到你的模型的实例!
我对这个问题的解决方案包括 jondavidjohn 的回答和 mkoistinen 的评论。
根据 CodeIgniter文档:
您还可以将字符串传递给 result() ,它表示要为每个结果对象实例化的类(注意:必须加载此类)
有了这些知识,我们可以用这种方式重写 jondavidjohn 的解决方案:
class Blogmodel extends CI_Model {
var $title = '';
var $content = ''; // Declare Class wide Model properties
var $date = '';
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_entry()
{
$query = $this->db->query('query to get single object');
$blogModel = $query->row('Blogmodel'); //Get single record
return $blogModel; //Return the Model instance
}
}