前提・実現したいこと
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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 19:52