2009-04-03 17 views

risposta

5

indovinare da questa frase nel manuale:

Un modello è generalmente un punto di accesso al database, e più specificamente, ad una certa tabella nel database. Per impostazione predefinita, ogni modello utilizza la tabella il cui nome è plurale a sé stante, cioè un modello "Utente" utilizza la tabella "utenti".

Io non la penso così, ma tu puoi fare relazioni forse questo è quello che ti serve.

Check this

+0

Non riesco ad aprire il collegamento "Verifica questo". –

1

non può avere più tabelle allo stesso tempo ..., ma si potrebbe essere in grado di modificare il modello :: proprietà useTable per passare tabella del modello a un altro. Dagli un giro e facci sapere se funziona.

2

Tecnicamente, in base al modo in cui stai ponendo la domanda, non che io sappia. Spesso, però, userò le relazioni con qualcosa che potrebbe essere simile a quello che stai cercando. Ad esempio, una persona ha informazioni sull'indirizzo che possono essere rilasciate nella tabella delle persone abbastanza facilmente, ma di solito preferisco estrapolarle perché altre entità possono anche avere indirizzi (un'azienda, ecc.).

Stessa idea se si desidera implementare una sorta di modello di pseudo-eredità nel DB. Ad esempio, i volontari sono persone, ma lo sono anche gli appaltatori, i venditori e i dipendenti. Tutti condividono alcune proprietà che potresti voler memorizzare in una tabella di persone e altre che sono uniche per il tipo di persona che sono.

In entrambi i casi si dispone di due modelli, ma interagiscono perfettamente con le loro associazioni.

Se è il tipo di scenario a cui stai pensando, un approccio simile potrebbe funzionare anche se non si tratta di un modello con più tabelle.

1

Immagino di voler implementare una sorta di ereditarietà nel database (che richiede di unire i dati memorizzati nella tabella padre quando si recuperano le informazioni dalla tabella figlia). Il mio approccio per risolvere questo problema era l'utilizzo del callback afterFind nel modello figlio. Ho ridefinito il callback come segue:

function afterFind($results) { 
    foreach ($results as $key => $val) { 
       $fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}"); 
       $results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*']; 
    } 
    return $results; 
} 

In questo modo sono stato incluso il campo/s dalla tabella padre per i risultati ottenuti dalla tabella figlio. In questo caso ho assunto che entrambe le tabelle siano indice con un campo chiamato id e che il campo, nella tabella figlio, sia anche una chiave esterna della tabella padre (creando così la pseudo-eredità).

4

Certo che può, è comodo quando si hanno tabelle molto identiche.

class SomeModel extends Model 
{ 
    var $useTable = false; 

    public function ReadData() 
    { 
     // select table 
     if($a == 1) 
      $this->setSource('tableName1'); 
     else if($a == 2) 
      $this->setSource('tableName2'); 
     // ... 
     else if($a == N) 
      $this->setSource('tableNameN'); 

     // now perform operations with selected table 
     return $this->find('all'); 
    } 
} 
+0

Puoi 'find ('all')' nell'intero insieme di tabelle invece di definire solo un singolo 'source'? – Oliboy50

Problemi correlati