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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

3748閲覧

データの一覧表示画面から詳細画面を表示させたい

gobindar

総合スコア51

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/03/20 03:26

お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。

やりたいこと

下記2点目を実現したいです。
(1点目は既に実現済)

  • 一般的な掲示板のサイトと同じく、データベースからデータ(文章)を取得し、

一覧表示(表形式)させる

  • リスト一覧表示の各レコードには「詳細を表示」リンクがあり、クリックすると、

データの詳細(詳しい項目など)が表示される

現状

下記を参照し、routeヘルパでパラメータとして配列(項目のデータ)を渡そうと
しましたが、なぜかrequestには項目のidのみが結果として出力されます。
https://readouble.com/laravel/5.5/ja/helpers.html

(routeのヘルパでパラメータとして渡すことができるものは、
配列ではなく1変数のみなのでしょうか?)

コントローラー

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Controllers\Controller; 7use App\Models\CaseModel; 8 9class ShowcaseController extends Controller 10{ 11 public function show_case_searched(Request $request) 12 { 13 $keyword = $request->input('keyword'); 14 15 if(!empty($keyword)){ 16 $cases = CaseModel::Where('case_a', 'like', '%'.$keyword.'%') 17 ->paginate(10); 18 }else{ 19 $cases = CaseModel::orderBy('created_at', 'desc')->paginate(10); 20 } 21 return view('case.show_case',compact('cases','keyword')); 22 } 23 24 public function show_case_detail(Request $request){ 25 $casedata = $request; 26//ここで、dd($casedata);としたときに、 27//+request: ParameterBag {#50 28//▼#parameters: array:1 [▼"case" => "4"]} 29//となってしまいます。 30//欲しいデータは、case_aやcase_bなどの、一覧表示時に取得したcaseテーブル内のデータです 31 32 return view('case.show_case_detail',compact('casedata')); 33 } 34 35} 36

ルーティング

php

1// show case 2Route::get('/show_case', function () {return redirect('/');})->name('show_case')->middleware('auth'); 3Route::post('/show_case', 'ShowcaseController@show_case_searched')->name('show_case')->middleware('auth'); 4Route::get('/show_case_detail', 'ShowcaseController@show_case_detail')->name('show_case_detail')->middleware('auth');

一覧表示画面のview

php

1<?php $num = 1 ?> 2@foreach($cases as $case) 3 <tr> 4 <td style="width:20px;">{{$num}}</td> 5 <td style="width:180px;">{{ $case->case_a }}</td> 6 <td style="width:120px;">{{ $case->case_b }}</td> 7 <td style="width:80px; text-align:center;"><a class="card-link" href="{{ route('show_case_detail', ['case'=> $case]) }}">詳細を表示</a></td> 8 </tr> 9<?php $num ++ ?> 10@endforeach 11

宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/20 03:33

そのオブジェクト(および親クラス等)に toString の実装がかいてあってそれがIDをかえしてるんじゃないの
gobindar

2019/03/20 03:37

asahina1979様 修正依頼有難うございます。 「 toString の実装」というのは、何を文字列として返しているということでしょうか? 何をtoStringするとcaseのidが返されるのか理解できておりません… また、「オブジェクト(および親クラス等)に toString の実装がかいてあってそれがIDをかえしてる」 と仮定すると、パラメータはそのまま配列として渡すことはできないということでしょうか。
退会済みユーザー

退会済みユーザー

2019/03/20 03:39

仮定するんじゃなく、ライブラリのクラスも含め確認しなさいな
退会済みユーザー

退会済みユーザー

2019/03/20 03:41

文字列として結合するような処理(ライブラリがしているのを含む)の場合、展開は自分でやらないといけません。
gobindar

2019/03/20 03:51

申し訳ありません、初心者ですので、そもそも確認の方法もままならないのですが、 view→routing→controller の順で動くと思っているのですが、そうだとすると、 下記のように探すのが適当でしょうか ・viewのroutingヘルパをレンダリング?(ヘルパを変換)する際に参照するファイル →どう検索すればよいでしょうか、Laravelの公式ページなどからroutingのヘルパ でしようしているライブラリのファイルを探す形でしょうか。 ・routing(Route::の記述)で参照しているファイル →ライブラリをクラスRoute::で検索し、viewのリンクから移動してきた場合に Controllerにどのようにパラメータを渡しているか確認すればよいでしょうか ・controllerで参照しているファイル →こちらuse App\Http\Controllers\Controller; をライブラリで検索し、routingから渡されたパラメータがどう変換されているか 確認すればよいでしょうか
guest

回答1

0

ベストアンサー

idが取れているなら where で id を指定してgetで情報取得できるかと思います。

例)
$cases = CaseModel::Where('id', $id)
->get();

一般的には、RouteのURLに {id}などを記載しておいて、
例) Route::put('user/{id}', 'UserController@update');

コントローラーのメソッドの引数で$idを受け取る方法が多いのかなと思います。
例) public function update(Request $request, $id)

参考
https://readouble.com/laravel/5.5/ja/controllers.html

投稿2019/03/20 03:39

編集2019/03/20 03:48
aoki_monpro

総合スコア45

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

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

m.ts10806

2019/03/20 03:43

マニュアル提示する場合は質問者さんのバージョンと合わせてあげたほうが良いですよ
aoki_monpro

2019/03/20 03:47

あら、5.5貼ったつもりで5.2でしたね、指摘ありがとうございます、修正いたしました。
gobindar

2019/03/20 04:00

aoki_monpro様 ご回答ありがとうございます。 記載が不十分で大変申し訳ありません、 確かにidでデータベースを再度検索することで 詳細画面での表示は可能ということは存じ上げております。 (ご丁寧な回答ありがとうございます) しかし、その場合そもそもその方法でよいのかという話を検討しなくてはならず、 (下記にて質問中です https://teratail.com/questions/180364?modal=q-comp) 勉強のためにも一旦リンクを使用した配列パラメータの受け渡しが 可能かご質問を差し上げました次第です。
gobindar

2019/03/20 04:01

mts10806様 コメント、ありがとうございます。
aoki_monpro

2019/03/20 04:09

そういう前提があるなら それも投稿頂いたほうがいいですね。(回答側は2つ質問が分かれている事は気づきづらいですので
gobindar

2019/03/20 04:10

aoki_monpro様、 只今上記別質問に対してmts10806様から idで再度データベースを検索する方法を取った方がよいとの ご回答頂きましたので、 aoki_monpro様にご記載頂きました通り、 idで検索を再度かけまして、詳細画面に表示する 方法を取りたいと存じます。 丁寧なご回答、有難うございました。
gobindar

2019/03/20 04:10

aoki_monpro様、 投稿の記載漏れ、申し訳ありませんでした。 次回ご質問差し上げる際は気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問