Codeigniter - вернуть объект моей модели вместо stdClass Object - PullRequest
5 голосов
/ 03 марта 2011

Не уверен, что лучший способ выразить это, так что терпите меня.

В Codeigniter я могу без проблем вернуть набор записей моего объекта, но он возвращается как объект stdClass, а не как объект "модель"(например, объект Page), который я затем могу использовать, чтобы использовать другие методы в этой модели.

Мне не хватает трюка здесь?Или это стандартная функциональность в CI?

Ответы [ 3 ]

8 голосов
/ 03 марта 2011

Да, в основном, для того, чтобы это работало, вам нужно объявить свойства ваших объектов 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.

0 голосов
/ 04 ноября 2015

Мое решение этой проблемы состояло из комбинации ответа Джондавиджона и комментария Мкойстинена.

Согласно документации CodeIgniter :

Вы также можете передатьстрока to 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
    }
}
0 голосов
/ 18 июля 2013

Тебе не нужно что-то вроде:

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

Просто поместите в метод result () вашу модель:

result(get_class($this));

или

result(get_called_class());

И вы получите экземпляр вашей модели!

...