回答編集履歴

3

主キー

2021/12/15 08:40

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -58,6 +58,8 @@
58
58
 
59
59
  {
60
60
 
61
+ protected $primaryKey = 'favorite_id';
62
+
61
63
  protected $connection = 'mysql_2';
62
64
 
63
65
 

2

Eloquent への応用

2021/12/15 08:40

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -21,3 +21,59 @@
21
21
  - Laravel は複数データベースを扱う際, `PDO` コネクションを別管理する設計思想
22
22
 
23
23
  - そのため, `DB` ファサードの実体,すなわち `Connection` インスタンス(`PDO` のラッパー)を取得する段階で参照先 DB を切り替え, JOIN 対象だけデータベース名まで完全修飾する構文を使う
24
+
25
+
26
+
27
+ ### Eloquent への応用
28
+
29
+
30
+
31
+ ```php
32
+
33
+ class User extends Model
34
+
35
+ {
36
+
37
+ protected $connection = 'mysql_1';
38
+
39
+
40
+
41
+ public function hasMany(): HasMany
42
+
43
+ {
44
+
45
+ return $this->hasMany(Favorite::class);
46
+
47
+ }
48
+
49
+ }
50
+
51
+ ```
52
+
53
+
54
+
55
+ ```php
56
+
57
+ class Favorite extends Model
58
+
59
+ {
60
+
61
+ protected $connection = 'mysql_2';
62
+
63
+
64
+
65
+ public function user(): BelongsTo
66
+
67
+ {
68
+
69
+ return $this->belongsTo(User::class);
70
+
71
+ }
72
+
73
+ }
74
+
75
+ ```
76
+
77
+
78
+
79
+ Eloquent を使う場合,上記のように `$connection` プロパティの設定で透過的に対処できます。ラクなので個人的にはこれが一番好みです。

1

補足

2021/12/15 08:37

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -11,3 +11,13 @@
11
11
  ->join('mysql_2.favorites as favorite', 'user.user_id', '=', 'favorite.user_id');
12
12
 
13
13
  ```
14
+
15
+
16
+
17
+ ### 解説
18
+
19
+
20
+
21
+ - Laravel は複数データベースを扱う際, `PDO` コネクションを別管理する設計思想
22
+
23
+ - そのため, `DB` ファサードの実体,すなわち `Connection` インスタンス(`PDO` のラッパー)を取得する段階で参照先 DB を切り替え, JOIN 対象だけデータベース名まで完全修飾する構文を使う