回答編集履歴
1
すみません、回答内容が誤っていたので削除しておきます。
test
CHANGED
@@ -1,67 +1 @@
|
|
1
|
-
モデルクラスの `getDetail()` メソッドの中で、 `query` メソッドを使っているからではないかと思われます。
|
2
|
-
|
3
|
-
これを使ってしまうと、「クエリビルダ」になってしまい、クエリビルダの戻り値は、「stdClass を格納したコレクション」になってしまうので。
|
4
|
-
|
5
|
-
getAttribute等の「Eloquentクラスに実装されている各種機能」を使いたい場合は、クエリビルダを使わないようにしてください。
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
クエリビルダを使わない場合、今、getDetailメソッドの中でやっていらっしゃるような「クエリを複数回発行して、結果をまとめたい時はどうするの?」という疑問がでてくると思いますが、そういう作業は「Eloquentクラスの外(今回の登場ファイルの中から選ぶならコントローラー)」で行ってください。
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
↓getDetailメソッドの一部抜粋
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
```
|
18
|
-
|
19
|
-
|
1
|
+
~~すみません、回答内容が誤っていたので削除しておきます(削除前の回答が気になる方は、履歴を見ていただければ)。~~
|
20
|
-
|
21
|
-
->select([
|
22
|
-
|
23
|
-
'payments.amount AS amount',
|
24
|
-
|
25
|
-
'payments.created_at AS created_at',
|
26
|
-
|
27
|
-
'lessons.title AS lessons_title',
|
28
|
-
|
29
|
-
])
|
30
|
-
|
31
|
-
->where([
|
32
|
-
|
33
|
-
['user_teacher_id', '=', $user_id],
|
34
|
-
|
35
|
-
['payments.status', '=', 0],
|
36
|
-
|
37
|
-
])
|
38
|
-
|
39
|
-
->leftJoin('applications', 'payments.application_id', '=', 'applications.id')
|
40
|
-
|
41
|
-
->leftJoin('lessons', 'applications.lesson_id', '=', 'lessons.id');
|
42
|
-
|
43
|
-
```
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
また、Eloquentの場合、JOINは使えないので、テーブルのリレーション機能を使ってください
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
参考:
|
54
|
-
|
55
|
-
[https://qiita.com/mtakehara21/items/3cef9d12869d162e1ce9](https://qiita.com/mtakehara21/items/3cef9d12869d162e1ce9)
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
余談ですが、個人的に、あまりLaravelのEloquentは好きではないので(可読性は良くなるものの、クエリ効率が悪い。大量データを扱う時は、この「クエリ効率の悪さ」がネックになる)、個人開発であれば「クエリメソッドを使う替わりに、getAttributeメソッドを使うのをあきらめる」という選択もありかと思います。
|
64
|
-
|
65
|
-
ただ、これはあまり一般的な考えではないと思いますので、チーム開発をしている場合には、あまりおススメしません(「普通のLaravel」に慣れている人が混乱します)。
|
66
|
-
|
67
|
-
素直にクエリビルダを諦めるほうが良いと思います。
|