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

質問編集履歴

2

コードの追加

2019/06/10 07:46

投稿

fumifumi_60
fumifumi_60

スコア36

title CHANGED
File without changes
body CHANGED
@@ -4,8 +4,12 @@
4
4
  検索値がない、即ちnullの時には条件に引っかからないように
5
5
  ifでwhereの指定を外しています。
6
6
 
7
- とスマートにnull時はwhereの指定無くすみたいなやり方はありまか?
7
+ 元々、scopeを使てこ処理していのですが、下記では上手くwhereが反映されていないようで
8
- やはり現在の記法が最適解しょう
8
+ チェーンで繋げいとダメなんね、
9
+ その場合かなり複雑なコーディングになりますし、どう書くのが正解なのでしょうか?
10
+ 質問はscopeを使わないで記述する場合の簡潔な方法、
11
+ 下記にscopeを使ったパターンもあるのでそちらの方が分かりやすいのであればそういった回答でも構いません。
12
+ (可読性の面でscopeの仕様を辞めようか模索している段階ですので。可読性が良いならscopeで良いかなと)
9
13
 
10
14
  #現在のコーディング
11
15
  ```
@@ -32,4 +36,62 @@
32
36
 
33
37
  しかし、これから更に検索値を増やすとなると分かりづらいと思い
34
38
  もっと簡単な記述に直せないものかと模索しております。
35
- 何かいい案はありますか?
39
+ 何かいい案はありますか?
40
+
41
+ #追記
42
+ 上のやり方でうまくいかないことに気付きました。
43
+ デバッグ時に上手く反映されてない状態だった。。。?
44
+ 元々上手く動いていたscope仕様のコードも追記いたします。
45
+
46
+ ```Eloquent
47
+ public function scopeWhereKeyword($query, $keyword)
48
+ {
49
+ //keywordの指定がない場合はそのままリターン
50
+ if (empty($keyword)) return;
51
+
52
+ //keywordの指定があった場合にはwhere句を整形する
53
+ return $query->where(function ($query) use ($keyword) {
54
+ $query->where('name', 'LIKE', "%$keyword%")->orWhere('kana', 'LIKE', "%$keyword%");
55
+ });
56
+ }
57
+
58
+ /**
59
+ * 検索された値の希望勤務地に値があれば適切なwhere句を返す
60
+ * @param $query
61
+ * @param $keyPlace
62
+ */
63
+ public function scopeWhereKeyPlace($query, $keyPlace)
64
+ {
65
+ //挿入された値がからの時はそのままリターン
66
+ if (empty($keyPlace)) return;
67
+
68
+ //値が入っていた時は適切な値を返す
69
+ return $query->where('place', $keyPlace);
70
+ }
71
+
72
+ /**
73
+ * 検索された値の希望職種に値があれば適切なwhere句を返す
74
+ * @param $query
75
+ * @param $keyJobType
76
+ */
77
+ public function scopeWhereKeyJobType($query, $keyJobType)
78
+ {
79
+ //挿入された値がからの時はそのままリターン
80
+ if (empty($keyJobType)) return;
81
+
82
+ //値が入っていた時は適切な値を返す
83
+ return $query->where('job_type', $keyJobType);
84
+ }
85
+ ```
86
+ ```Paginate
87
+ $paginate = Application::query()
88
+ ->whereKeyword($request->get('keyword'))
89
+ ->whereKeyPlace($request->get('keyPlace'))
90
+ ->whereKeyJobType($request->get('keyJobType'))
91
+ ->orderBy('id', 'asc')
92
+ ->paginate(10);
93
+ ```
94
+
95
+ 個人的にscope仕様は上手く出来ていると思うのですが、
96
+ eloquentを覗かないと処理も不透明ですし、可読性の面で悩んでおります。
97
+ scopeを使わなければどう書きますか?

1

タイトル修正

2019/06/10 07:46

投稿

fumifumi_60
fumifumi_60

スコア36

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