質問編集履歴

2

コードの追加

2019/06/10 07:46

投稿

fumifumi_60
fumifumi_60

スコア36

test CHANGED
File without changes
test CHANGED
@@ -10,9 +10,17 @@
10
10
 
11
11
 
12
12
 
13
- とスマートにnullはwhereの指定を無くすみたいなやり方はありまか?
13
+ 元々、scopeを使てこ処理をしていたのですが、下記で上手くwhereが反映されていないようで
14
14
 
15
- やはり現在の記法が最適解しょう
15
+ チェーンで繋げいとダメなんね、
16
+
17
+ その場合かなり複雑なコーディングになりますし、どう書くのが正解なのでしょうか?
18
+
19
+ 質問はscopeを使わないで記述する場合の簡潔な方法、
20
+
21
+ 下記にscopeを使ったパターンもあるのでそちらの方が分かりやすいのであればそういった回答でも構いません。
22
+
23
+ (可読性の面でscopeの仕様を辞めようか模索している段階ですので。可読性が良いならscopeで良いかなと)
16
24
 
17
25
 
18
26
 
@@ -67,3 +75,119 @@
67
75
  もっと簡単な記述に直せないものかと模索しております。
68
76
 
69
77
  何かいい案はありますか?
78
+
79
+
80
+
81
+ #追記
82
+
83
+ 上のやり方でうまくいかないことに気付きました。
84
+
85
+ デバッグ時に上手く反映されてない状態だった。。。?
86
+
87
+ 元々上手く動いていたscope仕様のコードも追記いたします。
88
+
89
+
90
+
91
+ ```Eloquent
92
+
93
+ public function scopeWhereKeyword($query, $keyword)
94
+
95
+ {
96
+
97
+ //keywordの指定がない場合はそのままリターン
98
+
99
+ if (empty($keyword)) return;
100
+
101
+
102
+
103
+ //keywordの指定があった場合にはwhere句を整形する
104
+
105
+ return $query->where(function ($query) use ($keyword) {
106
+
107
+ $query->where('name', 'LIKE', "%$keyword%")->orWhere('kana', 'LIKE', "%$keyword%");
108
+
109
+ });
110
+
111
+ }
112
+
113
+
114
+
115
+ /**
116
+
117
+ * 検索された値の希望勤務地に値があれば適切なwhere句を返す
118
+
119
+ * @param $query
120
+
121
+ * @param $keyPlace
122
+
123
+ */
124
+
125
+ public function scopeWhereKeyPlace($query, $keyPlace)
126
+
127
+ {
128
+
129
+ //挿入された値がからの時はそのままリターン
130
+
131
+ if (empty($keyPlace)) return;
132
+
133
+
134
+
135
+ //値が入っていた時は適切な値を返す
136
+
137
+ return $query->where('place', $keyPlace);
138
+
139
+ }
140
+
141
+
142
+
143
+ /**
144
+
145
+ * 検索された値の希望職種に値があれば適切なwhere句を返す
146
+
147
+ * @param $query
148
+
149
+ * @param $keyJobType
150
+
151
+ */
152
+
153
+ public function scopeWhereKeyJobType($query, $keyJobType)
154
+
155
+ {
156
+
157
+ //挿入された値がからの時はそのままリターン
158
+
159
+ if (empty($keyJobType)) return;
160
+
161
+
162
+
163
+ //値が入っていた時は適切な値を返す
164
+
165
+ return $query->where('job_type', $keyJobType);
166
+
167
+ }
168
+
169
+ ```
170
+
171
+ ```Paginate
172
+
173
+ $paginate = Application::query()
174
+
175
+ ->whereKeyword($request->get('keyword'))
176
+
177
+ ->whereKeyPlace($request->get('keyPlace'))
178
+
179
+ ->whereKeyJobType($request->get('keyJobType'))
180
+
181
+ ->orderBy('id', 'asc')
182
+
183
+ ->paginate(10);
184
+
185
+ ```
186
+
187
+
188
+
189
+ 個人的にscope仕様は上手く出来ていると思うのですが、
190
+
191
+ eloquentを覗かないと処理も不透明ですし、可読性の面で悩んでおります。
192
+
193
+ scopeを使わなければどう書きますか?

1

タイトル修正

2019/06/10 07:46

投稿

fumifumi_60
fumifumi_60

スコア36

test CHANGED
@@ -1 +1 @@
1
- Laravelにてeloquent検索値を挿入したい時のEloquentの使い方
1
+ Laraveleloquentにて検索値を挿入したい時のEloquentの使い方
test CHANGED
File without changes