"データベース" と "スキーマ" という単語がごっちゃになっていてよくわからないのですが、Eloquent の1つのモデルで複数のテーブルを切り替えて使いたいということでしょうか?
そうであれば、モデルクラスの $table
プロパティに都度テーブル名を指定してあげれば実現できます
php
1class BeautySalon extends Model {
2 // 省略
3}
4
5$salon1 = new BeautySalon();
6$salon1->table = 'beauty_laravel';
7$salon1->where('user', 'suzuki')->get();
8
9$salon2 = new BeautySalon();
10$salon2->table = 'salon_de_php';
11$salon2->find(123)->get();
さらに、テーブル指定をコンストラクタに組み込めば多少スマートになります。
php
1class BeautySalon extends Model {
2 public function __construct($table, array $attributes = []){
3 parent::__construct($attributes);
4 $this->table = $table;
5 }
6}
7
8$salon1 = new BeautySalon('beauty_laravel');
9$salon1->where('user', 'suzuki')->get();
10
11$salon2 = new BeautySalon('salon_de_php');
12$salon2->find(123)->get();
ただ一般的にテーブルを使い分けるというのは基本的にバッドハックです。レコード量が多すぎるのであればデータベースのパーティション機能を使うべきですし、カラム数が多すぎるのであればテーブルを分けてリレーションシップを使うべきです。
上記のサンプルコードのように使っているとバグの温床になりかねませんし、ORMを使う意味が薄れてしまう気がします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/15 00:33
2017/06/15 01:47
2017/06/15 02:25
2017/06/15 02:49 編集