質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1946閲覧

1つのbladeでclick時一覧表中身は表示せず、検索されたら検索結果を表示したい

gomora

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/26 06:14

編集2019/03/27 02:22

PHP初心者です

表題の通りなのですが、
1つのBladeでクリック時(サイト導入時)はDB一覧を表示させず、
検索ボックスより検索した時に始めてデータが出てくるようにしたいです。
ただ一覧を出すだけならできたのですが、最初は何も表示させず、検索した後に
SQLよりデータ抽出するなんてどうやって表示のタイミングかえるんだよ~~って感じで詰まってます。
(都合によりページを増やす事はできないのです。。。。)
そこでお力を借りれればと思います。
書き方が悪いなどめちゃくちゃあるかと思うのですが、ヒントだけでも戴きたいです。お願いいたします。

特にControllerのindex()内の$kmaster に下メソッドgetQueryの処理結果を入れればいけそうな気もするんですが、
returnする方法もあいまいです。。教えてください、

##Controller

<?php class BmasterListController extends Controller { public function index() { $query = new stdClass(); $b_code= 'b_code';//部署コード $tenpo_code= 'tenpo_code';//店舗コード $jname = 'sname'; //部署名 $name = 'name';  //店舗名 $kmaster ->getQuery($b_code, $tenpo_code, $name); //view に kmasterListを返す return view('kmasterList', ['kmaster' => $kmaster])->with('resultcount', $resultcount); } //検索 private function getQuery($b_code,$tenpo_code,$name) { // クエリ生成(部署コードと部署名を取得するためのクエリ) $query = DB::table('t_class') ->select('t_class.b_code', 'b_school.name as sname', 't_class.tenpo_code', 't_class.name') ->join('b_school', 't_class.b_code', '=', 'b_school.b_code'); //検索条件に部署コードが存在する場合 if (!empty($query->b_code)) { $query->where('b_code', 'like', '%' . $query->b_code. '%'); } // 検索条件に店舗コードが存在する場合 if (!empty($query->tenpo_code)) { $query->where('tenpo_code', 'like', '%' . $query->tenpo_code. '%'); } // 検索s条件に店舗名が存在する場合 if (!empty($query->name)) { $query->where('name', 'like', '%' . $query->name . '%'); } $kmaster = $query->get(); // 表示件数を取得 $resultcount = $kmaster->count(); //queryに bmasterListを返す //return $query('bmasterList', ['kmaster' => $kmaster])->with('resultcount', $resultcount); return $query;

##Blade

@section('content') <div id="site_content" class="kmaster"> <div id="content"> <h1>店舗マスタ・一覧</h1> <div class="stouroku">新規登録は<a href="{{ route('bmasterRegist.index') }}"> こちら</a></div> <div id="ju_search" class="search"> <form action="{{route('bmasterList.index')}}" method="post"> <!-- CSRF保護 --> @csrf <tbody> <tr> <td>  <p>部署     {{session(config('constants.SESSION_KEY_SCHCODE'))}} {{session(config('constants.SESSION_KEY_SCHNAME'))}}</p> </td> </tr> <tr> <td> <p>店舗コード <input type="text" name="kcode" class="cell clear"> 店舗名 <input type="text" name="kname" class="cell clear"></p> </td> </tr> </tbody> </table> <div class="buttons"> <p><input class="button bulu" type="submit" name="submit" value="検索"></p> <p><input id="inputClear" class="button green" type="reset" name="reset" value="クリア"></p> </div> </form> </div> <div id="ju_List" class="List2"> <p>({{ $resultcount }}件表示)</p> <table> <tr> <th> 部署コード </th> <th> 部署名 </th> <th> 店舗コード </th> <th> 店舗名 </th> <th> </th> <th> </th> </tr> @foreach ($kmaster as $val) <td>{{ $val->tenpo_code}} </td> <td>{{ $val->sname}} </td> <td>{{ $val->b_code}} </td> <td>{{ $val->name}} </td> <td> <a href="{{ route('bmasterList.delete', $val->tenpo_code) }}" onclick='return confirm("削除してもよろしいですか?");'>削除</a> </td> @endforeach </table> </div> </div> </div>

特にreturn文で$queryを返しているのですが、ちゃんと帰っているか。。。
##追記 Route

// 店舗マスタ・一覧 // 初期表示 Route::get('/bmasterList', 'BmasterListController@index')->name('bmasterList.index'); // 検索 Route::post('/bmasterList', 'BmasterListController@index')->name('bmasterList.index'); // 削除 Route::get('/bmasterList/{tenpo_code}', 'BmasterListController@delete')->name('bmasterList.delete');

##version
php7.3
laravel 5.7
MySQL 5.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/26 06:46

ルーティング部分もコード提示いただけますか?
gomora

2019/03/26 06:52

Controller のindex()ないの $kmaster ->getQuery($b_code, $tenpo_code, $name); の部分なのですが、いまいち理解しておらずエラーに対応する為このような表現になってしまっております。 (ここのあたりが特に意味わからん) ルートファイル追記しますです。
m.ts10806

2019/03/26 11:20

煽り文句は不要かと<激ムズ ちなみにLaravelのバージョンとphpのバージョンをマイナーバージョン含めて追記いただけますか? ヒント回答だけでも良いのでしょうけど、できればバージョンに沿った形にしたいので。
gomora

2019/03/26 23:28

バージョン情報の追記をいたしました
guest

回答1

0

ベストアンサー

簡単に言うと「getとpostで実行するメソッドをわける」でしょうか。
get時というのは単にアクセスしたときなので「検索はされていない」という状態かと思います。特に今回はpostで送信しているわけですよね。
メソッドをわけて同じビューを参照するようにするとコードがスッキリします。

もちろん「同じメソッドを参照する」でもできないことはないですが、get時に何も処理させないのに通すのは変な感じですよね。

あとはフラグを1つ、渡してください。getかpostかが判断できればOKです。

ルーティング

php

1// 初期表示 2Route::get('/bmasterList', 'BmasterListController@index')->name('bmasterList.index'); 3// 検索 4Route::post('/bmasterList', 'BmasterListController@search')->name('bmasterList.index');

コントローラ

php

1<?php 2class BmasterListController extends Controller { 3 4 public function index() { 5 6 //中略 7 8 return view('kmasterList', ['kmaster' => [],'search_flg' => false])->with('resultcount', 0); 9 } 10 public function search(Request $request) { 11 //入力情報は$request->input()からとるべきでは 12 //中略 13 $kmaster = $this->getQuery($b_code, $tenpo_code, $name); 14 //中略 15 16 return view('kmasterList', ['kmaster' => $kmaster,'search_flg' => true])->with('resultcount', $resultcount); 17 //※ $resultcountはちゃんとgetQuery()から返さないといけないのでは withって使い方あってるかな・・・ 18 } 19

](https://readouble.com/laravel/5.7/ja/helpers.html)

で、ビュー側では下記のようにする。

Blade

1@if (!$search_flg) 2 3<p>検索条件を入力して「検索」ボタンを押してください。</p> 4 5@else 6 @if($resultcount === 0) 7 <p>検索条件に合致する情報がありません。</p> 8 @else 9 <table> 10 //中略 11 @foreach ($kmaster as $val) 12 <tr> 13 //中略 14 </tr> 15 @endforeach 16 </table> 17 @endif 18@endif

投稿2019/03/27 00:33

編集2019/03/27 00:33
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomora

2019/03/27 04:12

私の理解が追い付かづ恐縮なのですが、ご提示頂いたコントローラの中略部分をもう少しお教えいただけないでしょうか?
m.ts10806

2019/03/27 04:14

index()は表示するだけなので特にその前の画面から渡される情報とかなければそのままですかね. search()はpostされた情報から$request->input()で取り出してgetQuery() に流してるだけです。あとはほぼ質問者さんのコントローラのロジックどおりかなと。 ※私も実際にコードを組んで試したわけではなく、あくまで考え方、ロジックとそれに使えそうな機能のリファレンス提示のみにしています。
gomora

2019/03/27 04:41

ご回答ありがとうございます。 ちなみに 「$request->input()で取り出してgetQuery() に流してるだけで」の部分がよくわかっていないので、 なんどもすいませんが、かみ砕いてお教えください。。
m.ts10806

2019/03/27 04:45 編集

私が提示したリファレンスは読まれましたか? 「Laravel 5.7 HTTPリクエスト」のほう。 POSTで送信された情報の取得の仕方です。今回は検索条件をPOSTで送信しているわけですからその情報を取得する必要があるわけです。 質問のコードを見る限り、どこにも検索条件を取得しているところがなかったため、補足として書いています。
gomora

2019/03/27 22:30

POST取得できました。ありがとうございます。 結果的には$resultcountを用いてindex()時はカウント0にして何も表示させず、検索ボックス(サーチ)というリクエストメソッドのを経由する事でカウント=検索結果として表示させる事ができました。 ヒントをいただきありがとうございました。
m.ts10806

2019/03/27 23:11

解決に繋がったようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問