5

不确定最好的表达方式,所以请耐心等待。

在 Codeigniter 中,我可以毫无问题地返回我的对象​​的记录集,但它作为 stdClass 对象而不是作为“模型”对象(例如页面对象)返回,然后我可以使用它来使用该模型中的其他方法。

我在这里错过了一个技巧吗?或者这是 CI 中的标准功能?

4

3 回答 3

8

是的,基本上为了使它工作,您需要在类范围内声明您的模型对象属性,并引用$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

于 2011-03-03T16:57:24.150 回答
0

你不需要像这样的东西:

$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());

你会得到你的模型的实例!

于 2013-07-18T13:38:34.757 回答
0

我对这个问题的解决方案包括 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
    }
}
于 2015-11-04T16:40:07.600 回答