teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

サンプルコード追加

2017/06/14 17:19

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -3,7 +3,6 @@
3
3
  そうであれば、モデルクラスの `$table` プロパティに都度テーブル名を指定してあげれば実現できます
4
4
 
5
5
  ```php
6
-
7
6
  class BeautySalon extends Model {
8
7
  // 省略
9
8
  }
@@ -13,10 +12,27 @@
13
12
  $salon1->where('user', 'suzuki')->get();
14
13
 
15
14
  $salon2 = new BeautySalon();
16
- $salon2->table = 'salon_php';
15
+ $salon2->table = 'salon_de_php';
17
16
  $salon2->find(123)->get();
18
17
  ```
19
18
 
19
+ さらに、テーブル指定をコンストラクタに組み込めば多少スマートになります。
20
+
21
+ ```php
22
+ class BeautySalon extends Model {
23
+ public function __construct($table, array $attributes = []){
24
+ parent::__construct($attributes);
25
+ $this->table = $table;
26
+ }
27
+ }
28
+
29
+ $salon1 = new BeautySalon('beauty_laravel');
30
+ $salon1->where('user', 'suzuki')->get();
31
+
32
+ $salon2 = new BeautySalon('salon_de_php');
33
+ $salon2->find(123)->get();
34
+ ```
35
+
20
36
  ただ一般的にテーブルを使い分けるというのは基本的にバッドハックです。レコード量が多すぎるのであればデータベースのパーティション機能を使うべきですし、カラム数が多すぎるのであればテーブルを分けてリレーションシップを使うべきです。
21
37
 
22
38
  上記のサンプルコードのように使っているとバグの温床になりかねませんし、ORMを使う意味が薄れてしまう気がします。

1

コード修正

2017/06/14 17:19

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```php
6
6
 
7
- class BeautySalon extends Eloquent {
7
+ class BeautySalon extends Model {
8
8
  // 省略
9
9
  }
10
10