Laravel リレーションとか該当する商品にコメントして取得
解決したいこと
現在。Laravelでアパレル閲覧サイト作成中。
詳細画面でコメント機能を作成して、適当にコメントをしてもらい表示をしたいのですが
商品は itemsテーブル
コメントは reviewsテーブル
現在itemsにて作成した商品id[3]にてコメントを書いたのですが、どのようにして
itemsとreviewsを結び付ければいいのか分かりません。
今はとりあえず全て持ってきているので、どの商品でも表示されます。
$reviews = Review::get();
解決方法を教えて下さい。
該当するソースコード
controller
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Item;
use App\Models\User;
use App\Models\Brand;
use App\Models\like;
use App\Models\Review;
**省略
public function show(Item $item, $id)
{
$like=Like::where('item_id', $item->id)->where('user_id', auth()->user()->id)->first();
$reviews = Review::get();
// $reviews =ここの記述が分からない
$items = Item::find($id);
return view('home.show', compact('items','like','reviews'));
}
public function brand()
{
$brands = Brand::get();
return view('home.brand',compact('brands'));
}
public function brand_show($id)
{
$brands = Brand::find($id);
$items = item::where('name','like', '%' .$brands->name. '%')->get();
return view('home.brand_show',compact('brands','items'));
}
public function edit($id)
{
$user = User::find($id);
return view('home.edit',compact('user'));
}
public function update(Request $request, $id)
{
$user = User::find($id);
$user->update($request->only(['name','name_kana', 'last_name', 'last_name_kana', 'postal_code', 'address', 'gender', 'telephone_number', 'emmail']));
return redirect()->route('home');
}
}
show
@extends('layouts.app')
@section('content')
<div class="conteiner">
<div class="card">
<div class="row">
<div class="col-6">
<div class="photo">
<img src="{{ Storage::url($items->image_id) }}" height="600px" >
</div>
</div>
<div class="col-4">
<div class="name">
{{ $items->name}}
</div>
<div style="text-align:right;">¥{{ $items->price}}</div>
<div class="introduction">
<div class="row mt-5">
{{ $items->introduction }}
</div>
</div>
<span>
<!-- もし$niceがあれば=ユーザーが「いいね」をしていたら -->
@if($like)
<!-- 「いいね」取消用ボタンを表示 -->
<a href="{{ route('unlike',$items) }}">
<img src="{{asset('img/nicebutton.png')}}" width="30px">
</a>
@else
<!-- まだユーザーが「いいね」をしていなければ、「いいね」ボタンを表示 -->
<a href="{{ route('like',$items) }}" >
<img src="{{asset('img/iine.png')}}" width="30px">
</a>
@endif
</span>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-10">
<h4>コメントを書く</h4>
<form method="POST" action="{{ route('review') }}">@csrf
<div class="col-md-4">
<textarea class="form-control" name="comment" placeholder="コメント" required autocomplete="comment" autofocus></textarea>
<button type="submit" class="btn btn-primary">
{{ __('コメントを記入') }}
</button>
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-10">
<h4>コメント一覧</h4>
<table class="table table-borderless">
<tr>
<th>コメント</th>
<th>時間帯</th>
</tr>
@foreach ($reviews as $review)
<tr>
<td>{{ $review->comment }}</td>
<td>{{ $review->created_at }}</td>
</tr>
</table>
@endforeach
</div>
</div>
</div>
</div>
</div>
@endsection
Model
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
public function likes()
{
return $this->hasMany('App\Models\Like');
}
public function items()
{
return $this->hasMany('App\Models\Items');
}
public function reviews()
{
return $this->hasMany('App\Models\Review');
}
以下省略
itemモデル
class Item extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo('App\Models\User');
}
public function likes()
{
return $this->hasMany('App\Models\Like');
}
public function reviews()
{
return $this->hasMany('App\Models\Review');
}
reviewモデル
class Review extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo('App\Models\user');
}
public function item()
{
return $this->belongsTo('App\Models\item');
}
自分で試したこと
いろいろ試しました。リレーション見直したのですが、解決策お願い致します。
0