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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

1079閲覧

[laravel]マイページでリレーションしたテーブルの情報を表示させたい

mori_samidori

総合スコア2

MySQL

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/10/20 15:07

前提・実現したいこと

laravelでSNSのように写真を投稿できるアプリケーションを作っています
マイページにログインユーザーの投稿(products)情報を表示させたいです

エラーメッセージ

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'products.product_user_id' in 'where clause' (SQL: select * from users where products.product_user_id is null)

該当のソースコード

使用テーブル
users
products
イメージ説明

モデル
User.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Contracts\Auth\MustVerifyEmail; 6use Illuminate\Foundation\Auth\User as Authenticatable; 7use Illuminate\Notifications\Notifiable; 8 9class User extends Authenticatable 10{ 11 use Notifiable; 12 13 /** 14 * The attributes that are mass assignable. 15 * 16 * @var array 17 */ 18 protected $fillable = [ 19 'name', 'email', 'password', 20 ]; 21 22 /** 23 * The attributes that should be hidden for arrays. 24 * 25 * @var array 26 */ 27 protected $hidden = [ 28 'password', 'remember_token', 29 ]; 30 31 /** 32 * The attributes that should be cast to native types. 33 * 34 * @var array 35 */ 36 protected $casts = [ 37 'email_verified_at' => 'datetime', 38 ]; 39 40 /** 41 * 作品情報を取得(1対多) 42 */ 43 public function products() 44 { 45 return $this->hasMany('App\Product', 'product_user_id', 'id'); 46 } 47 48}

Product.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Product extends Model 8{ 9 // 10 protected $fillable = [ 11 'product_user_id' 12 ]; 13 14 //relation 1対1 15 public function user(){ 16 return $this->belongsTo('App\User', 'product_user_id', 'id'); 17 } 18 19 20}

コントローラ
MypageController.php

php

1<?php 2 3namespace App\Http\Controllers; 4use Illuminate\Http\Request; 5use Illuminate\Support\Facades\Auth; 6 7 8use Validator; 9use App\User; 10use App\Product; 11 12class MypageController extends Controller 13{ 14 /** 15 * Display a listing of the resource. 16 * 17 * @return \Illuminate\Http\Response 18 */ 19 public function index(Request $request) 20 { 21 $user = Auth::user(); #ログインユーザー情報を取得 22 // dd($user->id); 23 $products = User::where('products.product_user_id', $user)->get(); 24 dd($products); 25 return view('mypage', compact('user', 'products')); 26 } 27} 28

試したこと

ユーザーと投稿は1対多(Hasmany)でリレーションしていて、ユーザー側からリレーション先の投稿(products)の情報を取ってきたいのですが、コントローラでの書き方がわかりません

php

1$products = User::where('products.product_user_id', $user)->get();

SQLで書くと下記のようなことを実現したいです

php

1SELECT products.product_user_id,products.product_name,product_cap FROM users LEFT OUTER JOIN products ON products.product_user_id=users.id where users.id=1;

※末尾users.id=1の部分はログインユーザーの情報を入れたいです
ビューはmyapage.blade.phpを表示させたいと考えています
アドバイスいただけると助かります
よろしくお願いいたします

補足情報

laravelバージョン 7.28.1
データベース mysql Ver 14.14
PHP 7.4.10

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

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

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

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

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

guest

回答2

0

問題の箇所を次のように書き換えれば行けると思いますが、お試し下さい。

php

1$products = User::where('products.product_user_id', $user)->get(); 23$products = $user->products()->get();

投稿2020/10/21 00:20

nshiro

総合スコア185

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

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

mori_samidori

2020/10/22 19:52

ご回答ありがとうございます。 アドバイスいただいた書き方で取りたい値を取得できました。 ありがとうございます!!
guest

0

ベストアンサー

Ex1

php

1 public function index(Request $request) 2 { 3 $user = $request->user(); 4 $products = $user->products; 5 return view('mypage', compact('user', 'products')); 6 }

blade

1@foreach ($products as $product) 2 {{ $product->product_name }} 3@endforeach

Ex2

php

1 public function index(Request $request) 2 { 3 $user = $request->user(); 4 return view('mypage', compact('user')); 5 }

blade

1{{ $user->products->implode('product_name') }}

投稿2020/10/21 00:42

phper.k

総合スコア3923

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

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

mori_samidori

2020/10/22 19:49

ご返答ありがとうございます! どちらの方法でもとりたかった値を取得することができました! いろいろな書き方があるんですね。勉強になります。 ログインユーザーの情報の取り方についてお聞きしたいのですが、 $requestで取得する方が一般的なのでしょうか?無 知ですみません。よろしければ教えてください。
phper.k

2020/10/23 00:13 編集

コントローラでやりたい場合は $request から撮るべきと思います。
mori_samidori

2020/10/23 03:40

ご返答ありがとうございます。$requestを使うようにします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問