Выбор и проверка наличия пользователя в таблице без foreach в ларавельном лезвии

Я не могу понять, как это сделать. Пользователь может видеть детали своего заказа. Я хочу сделать кнопку, чтобы пользователь мог оставить отзыв о продукте, который он приобрел.

Когда он оставил обзор для продукта, я хочу изменить кнопку «отправить обзор» на «редактировать отзыв». Проблема в том, как это сделать, если он купил 2 или более предметов? Я хочу иметь возможность оставлять обзор для каждого элемента отдельно.

В контроллере у меня есть эта функция:

public function orderView($orderId) { $order = Order::where('order_id', $orderId)->where('user_id', Auth::user()->user_id)->first(); $reviews = Review::where('user_id', Auth::user()->user_id)->first(); return View::make('site.users.orders_view', [ 'order' => $order, 'reviews' => $reviews ]); } 

Итак, здесь я выбираю его заказы и обзоры для аутентифицированного пользователя. Где я показываю кнопку на представлении «отправить отзыв», «редактировать обзор», я пробовал это

 @forelse($reviews as $review) @if($review->product_id == $item->product_id) @if($review->rating_published == 0) <a>Waiting</a> @else <a href="">Edit</a> @endif @else <a href="">Add</a> @endif @empty <a href="">Add</a> @endforelse 

Если у пользователя есть 2 продукта в указанном порядке и оставлено только для одного из них, обе кнопки будут изменены на « Edit Review .

Я хочу сделать это, если у пользователя есть 2 продукта в этом порядке и обзор для одного из продуктов, чтобы иметь одну кнопку «Редактировать обзор» и один «отправить обзор»,

введите описание изображения здесь

Related of "Выбор и проверка наличия пользователя в таблице без foreach в ларавельном лезвии"

После добавления отношений в модели продукта и модели Review вы можете отредактировать код контроллера следующим образом:

 public function orderView($orderId) { $order = Order::where('order_id', $orderId)->where('status', 1) ->where('user_id', Auth::user()->user_id) ->first(); $productIds = $order->getOrderProductIds(); $reviews = Review::with('item') ->whereHas('item', function($q) use($productIds){ $q->whereIn('product_id', $productIds); }) ->where('user_id', Auth::user()->user_id) ->get(); return View::make('site.users.orders_view', [ 'order' => $order, 'reviews' => $reviews ]); } 

Затем добавьте этот метод hepler в модель продукта:

 public static function hasReview($reviews, $product_id) { foreach ($reviews as $review) { if ($review->item->product_id == $product_id) { return $review; } } return null; } 

И в этом вы должны это сделать:

 <?php $review = \App\Product::hasReview($reviews, $item->product_id)?> @if($review != null) @if($review->rating_published == 0) <a class="btn btn-warning btn-xs">Waiting for Approval ID: {{$item->product_id }}</a> @else <a class="btn btn-warning btn-xs" href="{{ URL::to('/users/review/' . $item->product_id . '?_token=' . csrf_token()) }}">Edit Review ID: {{$item->product_id }}</a> @endif @else <a class="btn btn-warning btn-xs" href="{{ URL::to('/users/review/' . $item->product_id . '?_token=' . csrf_token()) }}">Leave Review ID: {{$item->product_id }}</a> @endif 

PS: Подумайте о добавлении:

  • От многих до многих отношений между Product и Order => это поможет вам во многих вопросах, особенно в запросах.
  • Класс помощника будет содержать вспомогательные методы, такие как hasReview

Вы можете сделать что-то лучше, с получением отзывов о заказе.
Поэтому в вашей модели продукта вы делаете:

 public function reviews() { return $this->hasMany('App\Review'); //depends from namespace of your model Review } 

И в вашей модели Обзор:

 public function product() { return $this->belongsTo('App\Product'); //depends from namespace of your model Product } 

А после в вашем контроллере:

 public function orderView($orderId) { $order = Order::where('order_id', $orderId)->where('user_id', Auth::user()->user_id)->first(); return View::make('site.users.orders_view', [ 'order' => $order ]); } 

И затем, на ваш взгляд,

 @foreach($order->product->reviews as $review) @if($review->user_id == Auth::user()->user_id) <a class="btn btn-warning btn-xs" href="">Edit Review</a></li> @else <a class="btn btn-warning btn-xs" href="">Submit Review</a></li> @endif @endforeach