2011-01-07 8 views
8

Colleghi programmatori, utilizzando codeigniter 1.7.3 è possibile caricare un modello dal codice di un altro modello? Ho letto molti post teorici e pratici ma nessuno ha dato una risposta definitiva.Caricamento e utilizzo di un modello codeigner da un altro modello

Ho un modello che ha una funzione in cui vorrei eseguire un'operazione su un altro modello. il codice è simile al seguente:

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

linea 1 funziona. linea 2 non riesce come segue:

Un PHP errore è stato rilevato
Severity: Avviso
Messaggio: Undefined property: Account_model :: $ decision_model
Nome file: la creazione di modelli/account_model.php

ho cercato semplice modelli stupidi, nomi di funzioni cambiate, dando al modello un alias durante il caricamento, ecc ... senza fortuna

Quindi, a parte la teoria, è fattibile?

grazie in anticipo.

+0

in genere si desidera farlo quando un modello fa riferimento a un altro modello (ad esempio utilizzando una chiave esterna in RDBM). Nel qual caso il modello originale avrà un attributo 'decision_model' che si riferisce al modello collegato. Se non lo hai, i modelli non sono collegati e l'uso di '$ this-> load' dal tuo primo modello non collegherà il modello caricato a qualcosa di utile. – Guss

+0

Si potrebbe desiderare di guardare il framework Kohana basato su CI ma consente cose come questa. –

+0

@Guss, i due modelli dovrebbero essere collegati - ecco perché sto cercando di accedere al secondo modello. Se ho riferimento (presumo che tu stia facendo riferimento ad un attributo di classe) nel modello originale, come dovrei inizializzarlo per fare riferimento al modello di decisione? grazie – djeetee

risposta

13

si può fare in questo modo:

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

che l'ha fatto! grazie mille :) stavo facendo qualcosa di simile ma spostando il codice in un aiutante e tutto il resto. stava diventando piuttosto brutto. grazie ancora. – djeetee

+6

In CI 2.0 puoi semplicemente chiamare un modello direttamente da un altro. – phirschybar

+0

@phischybar, capisci che questo è 1.7.3, giusto? –

0

Prova questo:

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

In CI 2.0 si può chiamare un modello direttamente da un altro.

0

È anche possibile aggiungere una variabile di classe private $_ci; e inizializzarla nel costruttore.

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

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

allora sarà a disposizione per qualsiasi funzione che si sta lavorando con, non c'è bisogno di get_instance() tutto il luogo.

Problemi correlati