2011-01-07 42 views
8

Otros codificadores, usando codeigniter 1.7.3 ¿Puedo cargar un modelo desde el código de otro modelo? He leído muchos mensajes teóricos y prácticos, pero ninguno dio una respuesta final.Cargando y usando un modelo codeigniter de otro modelo

Tengo un modelo que tiene una función en la que me gustaría realizar una operación en otro modelo. el código es el siguiente:

1: $this->load->model('decision_model'); 
2: $this->decision_model->hello_decision(); 

línea 1 funciona. línea 2 falla de la siguiente manera:

Un PHP Se encontró el error
Severidad: Aviso
mensaje: Undefined property: Account_model :: $ decision_model
Nombre del archivo: la creación de modelos/account_model.php

me han tratado sencilla modelos tontos, nombres de funciones modificados, dando al modelo un alias al cargarlo, etc ... sin suerte

Entonces, dejando de lado la teoría, ¿es factible?

gracias de antemano.

+0

generalmente desea hacer eso cuando un modelo hace referencia a otro modelo (por ejemplo, utilizando una clave externa en RDBM). En cuyo caso, el modelo original tendrá un atributo 'decision_model' que se refiere al modelo vinculado. Si no lo tiene, entonces los modelos no están vinculados y usar '$ this-> load' de su primer modelo no vinculará el modelo cargado a nada útil. – Guss

+0

Es posible que desee ver el marco Kohana que se basa en CI, pero permite cosas como esta. –

+0

@Guss, se supone que los dos modelos están vinculados, es por eso que intento acceder al segundo modelo. Si tengo referencia (supongo que se refiere a un atributo de clase) en el modelo original, ¿cómo lo inicializaría para referirme al modelo de Decisión? gracias – djeetee

Respuesta

13

Usted puede hacerlo de esta manera:

class User_model extends Model 
{ 
    function get_something() 
    { 
     $CI =& get_instance(); 
     $CI->load->model('profile_model'); 
     return $CI->profile_model->get_another_thing(); 
    } 
} 
+0

que lo hizo! muchas gracias :) estaba haciendo algo similar pero moviendo el código a un ayudante y todo eso. se estaba volviendo bastante feo gracias de nuevo. – djeetee

+6

En CI 2.0 puede simplemente llamar a un modelo directamente desde otro. – phirschybar

+0

@phischybar, entiendes que este es 1.7.3, ¿verdad? –

0

Prueba esto:

$this->load->model('decision_model'); 
$CI =& get_instance(); 
$CI->decision_model->hello_decision(); 
3

En CI 2.0 se acaba puede llamar un modelo directamente de otro.

0

También puede agregar una variable de clase private $_ci; e inicializarla en su constructor.

public function __construct($input=null) 
{ 
    $this->_ci =& get_instance(); 

    if ($input != null && is_array($input)) { 
     $this->populate($input); 
    } 
} 

entonces va a ser disponible para cualquier función que esté trabajando, no hay necesidad de get_instance() por todo el lugar.

Cuestiones relacionadas