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

回答編集履歴

3

主キー

2021/12/15 08:40

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -28,6 +28,7 @@
28
28
  ```php
29
29
  class Favorite extends Model
30
30
  {
31
+ protected $primaryKey = 'favorite_id';
31
32
  protected $connection = 'mysql_2';
32
33
 
33
34
  public function user(): BelongsTo

2

Eloquent への応用

2021/12/15 08:40

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -9,4 +9,32 @@
9
9
  ### 解説
10
10
 
11
11
  - Laravel は複数データベースを扱う際, `PDO` コネクションを別管理する設計思想
12
- - そのため, `DB` ファサードの実体,すなわち `Connection` インスタンス(`PDO` のラッパー)を取得する段階で参照先 DB を切り替え, JOIN 対象だけデータベース名まで完全修飾する構文を使う
12
+ - そのため, `DB` ファサードの実体,すなわち `Connection` インスタンス(`PDO` のラッパー)を取得する段階で参照先 DB を切り替え, JOIN 対象だけデータベース名まで完全修飾する構文を使う
13
+
14
+ ### Eloquent への応用
15
+
16
+ ```php
17
+ class User extends Model
18
+ {
19
+ protected $connection = 'mysql_1';
20
+
21
+ public function hasMany(): HasMany
22
+ {
23
+ return $this->hasMany(Favorite::class);
24
+ }
25
+ }
26
+ ```
27
+
28
+ ```php
29
+ class Favorite extends Model
30
+ {
31
+ protected $connection = 'mysql_2';
32
+
33
+ public function user(): BelongsTo
34
+ {
35
+ return $this->belongsTo(User::class);
36
+ }
37
+ }
38
+ ```
39
+
40
+ Eloquent を使う場合,上記のように `$connection` プロパティの設定で透過的に対処できます。ラクなので個人的にはこれが一番好みです。

1

補足

2021/12/15 08:37

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,4 +4,9 @@
4
4
  DB::connection('mysql_1')
5
5
  ->table('users as user')
6
6
  ->join('mysql_2.favorites as favorite', 'user.user_id', '=', 'favorite.user_id');
7
- ```
7
+ ```
8
+
9
+ ### 解説
10
+
11
+ - Laravel は複数データベースを扱う際, `PDO` コネクションを別管理する設計思想
12
+ - そのため, `DB` ファサードの実体,すなわち `Connection` インスタンス(`PDO` のラッパー)を取得する段階で参照先 DB を切り替え, JOIN 対象だけデータベース名まで完全修飾する構文を使う