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

回答編集履歴

1

コメントの内容を受けて追記

2016/09/28 07:14

投稿

Archsted
Archsted

スコア452

answer CHANGED
@@ -20,4 +20,51 @@
20
20
 
21
21
  > return view('index')->with('search_result', $search_result);
22
22
 
23
- とすると考えやすいかと思います。
23
+ とすると考えやすいかと思います。
24
+
25
+ ---
26
+
27
+ # コメントの内容を受けて追記
28
+
29
+ 最初に私が挙げた回答ですと、検索結果のデータはビューに送っていますが、一覧のデータをビューに送っていないため、一覧を表示する所でエラーが出てしまったのだと思います。
30
+
31
+ ビューに複数種のデータを表示したい場合(仮に一覧が`$res`、検索結果が`$search_result`に格納されているならば)Controllerの最後でビューを返す際に、以下のように書けます。
32
+ (withを使う書き方もあります。要はいくつものデータを同時にビューに渡せるという事です)
33
+
34
+ ```PHP
35
+
36
+ return view('index', ['res' => $res, 'search_result' => $search_result]);
37
+ return view('index', compact('res', 'search_result')); // こう書いても同等
38
+
39
+ ```
40
+
41
+ marrymejyjさんの書かれたコードですと、「データの取得部分」と「コントローラとしての振る舞い」が同居してしまっているため、分離した方がいいと思われます。
42
+ 現在のソースをベースに、日本語交え大雑把に書くと以下のような感じでしょうか。
43
+
44
+ ```PHP
45
+
46
+ // Controller
47
+ public function 一覧表示() // getIndexにあたるもの
48
+ {
49
+ $res = データ一覧を取得する処理();
50
+
51
+ return view('index', ['res' => $res]);
52
+ }
53
+
54
+ public function 検索と結果表示() // searchInputにあたるもの
55
+ {
56
+ $input = Request::all();
57
+ $search_result = 検索結果を取得する処理($input);
58
+
59
+ $res = データ一覧を取得する処理();
60
+
61
+ return view('index', ['res' => $res, 'search_result' => $search_result]);
62
+ }
63
+
64
+ ```
65
+
66
+ **データ一覧を取得する処理()** や **検索結果を取得する処理()** の最後は
67
+ `view`を`return`するのではなく、単純に**データベースの検索結果**をreturnしてあげてください。
68
+ データ一覧を別の画面で出したいような場合に、同じメソッドが使い回せるようになります。
69
+
70
+ 一例としてお試しください。