2011-03-03 27 views
5

No estoy seguro de la mejor manera de expresar esto así que tengan paciencia conmigo.Codeigniter - devuelve mi objeto modelo en lugar de stdClass Objeto

Dentro de Codeigniter puedo devolver un conjunto de registros de mi objeto sin problema, pero esto se devuelve como un objeto stdClass no como un objeto "modelo" (por ejemplo, un objeto de página) que luego puedo usar para utilizar otros métodos dentro de ese modelo.

¿Falta algún truco aquí? ¿O es esta la funcionalidad estándar dentro de CI?

Respuesta

8

Sí, básicamente para que esto funcione, debe declarar las propiedades de sus objetos de modelo en toda la clase, y referirse a $this como el objeto de modelo actual.

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 
    } 
} 

creo get_entry() devolverá un tipo de objeto Blogmodel.

+0

excelente gracias - t Hat lo ha aclarado perfectamente. – simnom

+3

Pregunta original aquí, ¿por qué no solo hacer esto: 'function get_entry ($ id) {return $ this-> db-> where ('id', $ id) -> get ('tabla_blog') -> fila (0, "Blogmodel"); } '? – mkoistinen

+0

con CI, la forma de mkoistinen es la forma correcta de hacerlo. Sin embargo, el camino de jondavidjohn está funcionando. – twnaing

0

No es necesario algo así como:

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

sólo hay que poner al resultado() método ur modelo:

result(get_class($this)); 

o

result(get_called_class()); 

Y ¡obtendrás instancia de tu modelo!

0

Mi solución a este problema consistió en una combinación de la respuesta de jondavidjohn y el comentario de mkoistinen.

De acuerdo con la CodeIgniter documentation:

También puede pasar una cadena de resultado(), que representa una clase de instantiate para cada objeto de resultado (nota: esta clase se debe cargar)

Armado con este conocimiento, podemos reescribir la solución de jondavidjohn de esta manera:

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 
    } 
} 
Cuestiones relacionadas