Laravel 4: может ли одна модель обслуживать несколько таблиц БД?

В моем приложении у меня несколько таблиц mysql: Toronto, Vancouver, Montreal и т. Д. … и я использую DB-класс для работы с ними, например.

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

Я хочу, чтобы начать использовать Eloquent. Я новичок в Laravel и просто задавался вопросом, возможно ли иметь одну модель с несколькими таблицами, например:

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

Это невозможно, но вы можете. Есть много способов, вот один:

Создайте модель города, которая запрашивает имя таблицы в своем конструкторе:

 class City extends Eloquent { public function __construct($city, array $attributes = array()) { parent::__construct($attributes); $this->table = $city; } } 

Чтобы использовать его, вам необходимо создать экземпляр класса, используя имя таблицы:

 $toronto = new City('toronto'); 

Затем вы можете делать с ним все, что хотите:

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

Вы можете сделать $model->setTable('mytable') после того, как у вас установлена ​​модель, но для нескольких таблиц я бы предпочел, чтобы вы сделали одну «базовую» модель со всеми необходимыми функциями, а затем несколькими другими классами, которые расширяют этот класс но определить их собственную таблицу с protected $table = 'table' .

Однако в вашем случае это звучит так, будто вы не должны хранить данные в разных таблицах базы данных. Если вы можете найти способ хранения состояния в виде столбца вместо отдельных таблиц, это будет лучше.