Коллекция не может быть преобразована в int Laravel - PullRequest
0 голосов
/ 14 марта 2020

Я хочу, чтобы пользователь оценил (оценил) продукт только один раз, я видел это и пробовал, но у меня появляется ошибка Object of class Illuminate\Database\Eloquent\Collection could not be converted to int как я могу это исправить, чтобы пользователь мог Чтобы просмотреть продукт один раз.

Product. php

public function reviews()
{
    return $this->hasMany(ProductReview::class);
}

 public function currentUserHasSubmittedReview(){
    $countOfReviews = $this->reviews()
        ->where('user_id', Auth::user()->id)
        ->where('product_id', $this->id)
        ->get();

    return ($countOfReviews > 1 ? true : false);  //Error comes from this line
}

ProductReview. php

 public function product()
  {
    return $this->belongsTo('App\Product');
  }

Файл Blade

  @foreach($products as $product)
     @if ($product->currentUserHasSubmittedReview() == false )
     <a " href="#openModal-about">Write review</a>
      @else

      @endif
  @endforeach

1 Ответ

3 голосов
/ 14 марта 2020

$countOfReviews - это Collection, но вы пытаетесь рассматривать его как целое число, используя > 1. > 1 вернет true, только если их больше 1, а не существует.

Один из способов обойти это - использовать exists() вместо get() с запросом:

public function currentUserHasSubmittedReview()
{
    return $this->reviews()
        ->where('user_id', Auth::user()->id)
        ->where('product_id', $this->id)
        ->exists();
}

Вышеописанное также будет более эффективным, так как база данных делает больше подъема, и вам не нужно загружать несколько экземпляров коллекции просто для подсчета их по факту.

...