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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

Laravel 5

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

Q&A

解決済

4回答

8417閲覧

user_idが一致するもののみ表示させたい

reina0609

総合スコア16

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/06/12 05:34

編集2019/06/12 06:12

閲覧いただきありがとうございます。

データベースから、user_idが特定のもののみ、表示させたいです。

例えば、ログインしたユーザーが、user_id=1ならば、そのデータのみ表示させるマイページ画面を表示させるものです。

現在、user_idは取得できているのですが、それに一致したデータが表示されず、マイページをクリックすると、not found が表示されてしまい困っています。

よろしくお願いします。

web.php

php

1 2Route::group(['middleware' => 'auth'],function(){ 3 4 Route::get('/users/{user_id}/plans', 'HomeController@index')->name('home');/こちらを使ってマイページを表示させたいです/ 5 6 Route::get('/plans/create', 'PlanController@showCreateForm')->name('plans.create'); 7 Route::post('/plans/create', 'PlanController@create'); 8 9 Route::get('/users/{user_id}/plans/{p_id}/edit', 'PlanController@showEditForm')->name('plans.edit'); 10 Route::post('/users/{user_id}/plans/{p_id}/edit', 'PlanController@edit'); 11 12}); 13 14Auth::routes(); 15 16Route::get('/plans', 'PlanController@index')->name('plans.index');

Homecontroller.php

php

1 2public function index() 3 { 4 $user_id = Auth::id(); 5 6 $plans = Plan::where('user_id',$user_id)->select('title','image'); 7 8 return view('home',[ 9 'user_id' => $user_id, 10 'plans' => $plans, 11 ]); 12 }

layout.blade.php

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Travel</title> 8 @yield('styles') 9 <link rel="stylesheet" href="/css/styles.css"> 10</head> 11<body> 12<header> 13 <nav class="my-navbar"> 14 <a class="my-navbar-brand" href="{{ route('plans.index') }}">Travel</a> 15 <div class="my-navbar-control"> 16 @if(Auth::check()) /ここのマイページから、目的のマイページに遷移/ 17 <a href=“{{ route('home', ['user_id' => Auth::id()]) }}” id=“mypage” class=“my-navbar-item”>マイページ</a> 1819 <a href="#" id="logout" class="my-navbar-item">ログアウト</a> 20 <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> 21 @csrf 22 </form> 23 @else 24 <a class="my-navbar-item" href="{{ route('login') }}">ログイン</a> 2526 <a class="my-navbar-item" href="{{ route('register') }}">会員登録</a> 27 @endif 28 </div> 29 </nav> 30</header> 31<main> 32 @yield('content') 33</main> 34@if(Auth::check()) 35 <script> 36 document.getElementById('logout').addEventListener('click', function(event) { 37 event.preventDefault(); 38 document.getElementById('logout-form').submit(); 39 }); 40 </script> 41@endif 42@yield('scripts') 43</body> 44</html> 45

home.blade.php

HTML

1@extends('layout') 2 3@section('content') 4 <div class="container"> 5 <div class="row"> 6 <div class="col col-md-offset-3 col-md-6"> 7 <nav class="panel panel-default"> 8 <div class="panel-heading"> 9 登録プラン一覧 10 </div> 11 <div class="panel-body"> 12 <div class="text-center"> 13 <div> 14 @foreach ($plans as $plan) 15 <div class="list-group-item"> 16 {{ $plan->title }} <br > 17 {{ $plan->image }} 18 </div> 19 @endforeach 20 </div> 21 </div> 22 </div> 23 </nav> 24 </div> 25 </div> 26 </div> 27@endsection 28

DBの取得したい情報です。
イメージ説明

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

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

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

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

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

m.ts10806

2019/06/12 05:49

not foundはどこでどう出ているのでしょうか。(というか何がnotfound)なのでしょうか。 index()にて取得した$postsのdump()の結果と、blade側でのdump()の結果を教えてください。 あとコードブロックの書き方ですが ```ここに言語を入力 ←ここは言語名を書きます。 PHP、HTMLなどですね。 Laravelもちょこちょこスペルミスされていますし、調整願います。
m.ts10806

2019/06/12 05:54 編集

えっと。Laravelは言語ではなくあくまでフレームワークなので「PHP」ですね。 言語名を入れると言語に則したシンタックスハイライトが施されます。
reina0609

2019/06/12 06:16 編集

エラーとしては、 local.ERROR: Route [/users/{user_id}/plans] not defined. (View: /var/www/resources/views/layout.blade.php) (View: /var/www/resources/views/layout.blade.php) {"userId":1,"exception":"[object] (ErrorException(code: 0): Route [/users/{user_id}/plans] not defined. (View: /var/www/resources/views/layout.blade.php) (View: /var/www/resources/views/layout.blade.php) at /var/www/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:388, ErrorException(code: 0): Route [/users/{user_id}/plans] not defined. (View: /var/www/resources/views/layout.blade.php) at /var/www/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:388, InvalidArgumentException(code: 0): Route [/users/{user_id}/plans] not defined. at /var/www/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:388) [stacktrace] と出ています。 layout.php の<a href=“{{ route('home', ['user_id' => Auth::id()]) }}” id=“mypage” class=“my-navbar-item”>マイページ</a> をクリックした際、 not found と表示されます。 index()にて取得した$postsのdump()の結果と、blade側でのdump()の結果なのですが、 index()にて取得した$postsのdump()の結果はnot foundとなってしまうため、確認方法がわかりませんでした。 blade側でのdump()の結果は['user_id' => Auth::id()]から、1となっております。
hentaiman

2019/06/12 07:00

エラーログまで確認しててroute not definedって出てるんならとりあえずroute listでルーティング情報確認してみては?
reina0609

2019/06/12 07:30

ルーティングを確認してみましたが、 GET|HEAD | users/{user_id}/plans | home | App\Http\Controllers\HomeController@index | web,auth となっており、正しくできているようでした。
guest

回答4

0

Laravel的には、ルートモデルバインディングの暗黙の結合を使った方が良い気がします。

Laravel 5.8 ルーティングモデル結合ルート 暗黙の結合

Route::group(['middleware' => 'auth'],function(){ Route::get('/users/{user}/plans', 'HomeController@index')->name('home'); });
public function index(User $user) { $plans = Plan::where('user_id',$user->id)->select('title','image'); return view('home',[ 'user_id' => $user->id, 'plans' => $plans, ]); }
<a href=“{{ route('home', ['user' => Auth::user()]) }}” id=“mypage” class=“my-navbar-item”>マイページ</a>

投稿2019/06/12 09:25

aro10

総合スコア4106

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

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

reina0609

2019/06/13 05:41

コメントありがとうございます!「暗黙の結合」読みましたが、まさしくこの、「一致するモデルインスタンスがデータベースへ存在しない場合、404 HTTPレスポンスが自動的に生成されます。」という部分でnot foundが出ていると思われます! 回答いただいた通り、修正してみたのですが、やはり、not found が出てしまい、原因は「一致するモデルインスタンスがデータベースへ存在しない」ことであると考え、 モデルApp\Userのモデルに protected $fillable = [ 'name', 'email', 'password','id', ]; とし、web.phpを Route::get('/users/{user}/plans',function(App\User $user){ return $user->id; },'HomeController@index')->name('home'); としてみたのですが、やはりnot found と出てしまいました。他に対処法はありますでしょうか?
aro10

2019/06/13 06:16

なるほど user引数のidを実際にあるUserデータのidにしてみるとどうでしょうか(ここではid 1があるとして) <a href=“{{ route('home', ['user' =>1]) }}” id=“mypage” class=“my-navbar-item”>マイページ</a>
aro10

2019/06/13 06:16

あと、artisan make:authで作成される、デフォルトのhome用ルートはコメントアウトや削除しているでしょうかも確認してみてください。
reina0609

2019/06/13 06:32

id=1の場合も not found となりました。(Auth::user()の場合でも、URLから、idは取得できているようです)home用のルートは、ControllerのAuth、Middleware全て書き換え済みです。 ルートを再度確認したのですが、 GET|HEAD | users/{user}/plans | home | Closure となっており、 Route::get('/users/{user}/plans',function(App\User $user){ return $user->id; },'HomeController@index')->name('home'); では、ルーティングがうまくいっていないようでした。この書き方は正しくないのでしょうか?
aro10

2019/06/13 06:58

うーん、難しいですね。 Not Foundになる、URLは (アプリの基本URL)/users/1/plans にきちんとなっていますか? また、App\Userのタイプヒントを消して、以下にすると単に1が表示されるでしょうか Route::get('/users/{user}/plans',function($user){ return $user; },'HomeController@index')->name('home');
guest

0

こちら解決しました。
原因は、

php

1<a href="{{ route('mypage') }}">

としていたためでした。ダブルクォーテーションいらず、

php

1<a href={{ route('mypage') }}>

として、not foundは出なくなりました!
回答いただきありがとうございました。

投稿2019/06/14 08:11

編集2019/06/14 08:19
reina0609

総合スコア16

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

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

0

自己解決

0
こちら解決しました。
原因は、

PHP

1<a href="{{ route('mypage') }}">

としていたためでした。ダブルクォーテーションいらず、

PHP

1<a href={{ route('mypage') }}>

として、not foundは出なくなりました!
回答いただきありがとうございました。

投稿2019/06/14 08:09

編集2019/06/14 08:18
reina0609

総合スコア16

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

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

0

ルーティングで定義したパラメータをコントローラで受け取って利用してみては。

php

1Route::get('/users/{user_id}/plans', 'HomeController@index')->name('home')

なので、例えばこう

php

1 public function index($user_id) 2 { 3 $plans = Plan::where('user_id',$user_id)->select('title','image'); 4 5 return view('home',[ 6 'user_id' => $user_id, 7 'plans' => $plans, 8 ]); 9 }

ただ、もし「ログイン者のみ情報を見ることができる」のでしたらそもそもルーティングにuser_idは不要に思いますが、そこは仕様次第です。
※誰でも見れるのでしたらidよりもteratailのようにユーザー名のほうが良いです。

投稿2019/06/12 06:31

m.ts10806

総合スコア80850

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

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

reina0609

2019/06/12 07:29

回答ありがとうございます。回答いただいた通り、修正してみたのすが、やはり、同様にlayout.php の<a href=“{{ route('home', ['user_id' => Auth::id()]) }}” id=“mypage” class=“my-navbar-item”>マイページ</a> をクリックした際、 not found と表示されてしまいました。 よろしければ、他に考えられる原因を教えていただけますでしょうか?
m.ts10806

2019/06/12 07:36

hrefの設定値はどうなっていますか? ブラウザ「ソースを表示」から確認してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問