2013-09-02 4 views
2

Dans mon application j'ai plusieurs tables mysql: Toronto, Vancouver, Montréal, etc ... et j'utilise la classe DB pour travailler avec eux, par exemple.Laravel 4: un modèle peut-il servir plusieurs tables DB?

$data = DB::select('select * from toronto where id = ?', array($id)); 

Ce que je veux faire est de commencer à utiliser Eloquent. Je suis nouveau à Laravel et me demandais s'il est possible d'avoir un modèle de travail avec plusieurs tables, SMTH comme:

class City extends Eloquent { 
     protected $table_a = 'toronto'; 
     protected $table_b = 'vancouver'; 
     protected $table_c = 'montreal'; 
} 
+0

non, ce n'est pas ainsi des années ORM dans le travail général. Par l'apparence de votre structure de données, vous ne jouez pas aux points forts de SQL. Est-ce que chacune de vos tables a le même nom de colonne par hasard? –

+0

oui mes tables sont toutes les mêmes. chacun a approximativement 100 rangées (cela pourrait être 90 rangées, ou 110 rangées cependant) et je mets à jour chaque ville quotidiennement. Bien, je pourrais garder toutes les villes dans une table mais n'est-il pas mieux de les mettre à jour séparément en termes de performance? – mikek

Répondre

12

Il ne peut pas, mais vous le pouvez. Il y a plusieurs façons, en voici une:

Créer votre modèle de ville qui demande un nom de table dans son constructeur:

class City extends Eloquent { 

    public function __construct($city, array $attributes = array()) 
    { 
     parent::__construct($attributes); 

     $this->table = $city; 
    } 

} 

Pour l'utiliser, vous devrez instancier votre classe en utilisant le nom de la table:

$toronto = new City('toronto'); 

alors vous pouvez faire tout ce que vous voulez avec:

var_dump($toronto->where('id',701057)->get()); 
2

Vous pouvez faire $model->setTable('mytable') une fois que vous avez un modèle instancié, mais pour plusieurs tables, je recommande plutôt vous créez un modèle "base" avec toutes les fonctionnalités dont vous avez besoin, puis plusieurs autres classes qui étendent cette classe mais définissent leur propre table avec protected $table = 'table'.

Cependant, dans votre cas, il semble que vous ne devriez pas conserver les données dans des tables de base de données distinctes. Si vous pouvez trouver un moyen de stocker l'état en tant que colonne au lieu de dans des tables séparées, ce serait mieux.

Questions connexes