2009-04-03 20 views

Respuesta

5

Adivinar de esta frase en el manual:

Un modelo es generalmente un punto de acceso a la base de datos, y más específicamente, a una cierta tabla en la base de datos. De manera predeterminada, cada modelo usa la tabla cuyo nombre es plural, es decir, un modelo de "Usuario" usa la tabla de "usuarios".

No lo creo, pero puede hacer que las relaciones tal vez eso es lo que necesita.

Check this

+0

No puedo abrir este enlace "Comprobar esto". –

1

No puede tener varias tablas al mismo tiempo ..., pero que podría ser capaz de modificar el modelo :: propiedad useTable para cambiar la mesa del modelo a otro diferente. Dale un giro y avísanos si funciona.

2

Técnicamente, basado en la forma en que haces la pregunta, no que yo sepa. A menudo, sin embargo, usaré relaciones con algo que podría ser similar a lo que estás buscando. Por ejemplo, una persona tiene información de dirección que puede soltarse en la tabla de personas con la suficiente facilidad, pero generalmente prefiero sacarla porque otras entidades también pueden tener direcciones (una empresa, etc.).

La misma idea si desea implementar algún tipo de modelo de pseudo herencia en su base de datos. Por ejemplo, los voluntarios son personas, pero también lo son los contratistas, vendedores y empleados. Todos comparten ciertas propiedades que puede querer almacenar en una tabla de personas y otras que son únicas para el tipo de persona que son.

En cada caso, tiene dos modelos, pero funcionan juntos sin problemas a través de sus asociaciones.

Si ese es el tipo de escenario en el que está pensando, un enfoque similar podría funcionar para usted, aunque no se trata de que un modelo tenga varias tablas.

1

Supongo que desea implementar algún tipo de herencia en la base de datos (que requiere unir los datos almacenados en la tabla principal cuando se recupera información de la tabla secundaria). Mi enfoque para resolver esto fue utilizar la devolución de llamada afterFind en el modelo hijo. Redefiní la devolución de llamada de la siguiente manera:

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

De esta manera estaba incluido el campo/s de la tabla primaria a los resultados obtenidos de la tabla secundaria. En este caso, he supuesto que ambas tablas están indexadas con un campo llamado id y ese campo, en la tabla hija, también es una clave externa a la tabla padre (creando así la pseudo herencia).

4

Claro que sí, es conveniente cuando tienes muchas tablas idénticas.

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

¿Puedes 'encontrar ('todo')' en todo el conjunto de tablas en lugar de simplemente definir una sola 'fuente'? – Oliboy50

Cuestiones relacionadas