Codeigniter - 返回我的模型对象而不是stdClass对象

时间:2011-03-03 14:23:24

标签: php codeigniter codeigniter-2 models stdclass

不确定这句话的最佳表达方式对我有所帮助。

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

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

你不需要像:

$this->title   = $db_row->title;
        $this->content = $db_row->content;  //Populate current instance of the Model
        $this->date    = $db_row->date;

只需将结果()方法放入ur model:

result(get_class($this));

result(get_called_class());

你会得到你模特的实例!

答案 2 :(得分:0)

我对这个问题的解决方案包括jondavidjohn的回答和mkoistinen的评论。

根据CodeIgniter documentation

  

您还可以将字符串传递给表示类的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
    }
}