В моем приложении у меня несколько таблиц 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'
.
Однако в вашем случае это звучит так, будто вы не должны хранить данные в разных таблицах базы данных. Если вы можете найти способ хранения состояния в виде столбца вместо отдельных таблиц, это будет лучше.