Фасад \ Ignition \ Exceptions \ ViewException count (): параметр должен быть массивом или объектом, реализующим Countable (представление: - PullRequest
0 голосов
/ 02 февраля 2020

Я запускаю следующий код для отображения моего отношения один ко многим, однако я получаю сообщение об ошибке: Facade \ Ignition \ Exceptions \ ViewException count (): Параметр должен быть массивом или объектом, реализующим Countable (представление:

Это мой код: PostsController. php

public function show($id)
{
    $post = Post::find($id);
    $review = Post::find(1)->reviews()->where('title', 'posts_title')->first();
    //$review = Review::all();

    return view('posts.show', compact('post', 'review'));
}

Post. php

   protected $tables='reviews';

  function reviews(){

      return $this->hasMany('App\Review', 'title', 'post_title');

    }

Из трассировки стека ошибка здесь:

    @if(count($review) > 1)

    @foreach($review as $reviews)

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Метод count () в PHP ожидает исчисляемый объект, массив или коллекцию. Если передан любой другой тип данных, например строка, пустые или пустые значения, он строго генерирует фатальную ошибку в PHP версии 7.X, но PHP 5.x просто говорит предупреждение и продолжает выполнение.

Вы можете избежать этого с помощью пустой функции

@if(!empty($review))

    @foreach($review as $reviews)
0 голосов
/ 02 февраля 2020

если вы используете -> first (), вы получаете один объект, а затем вы не можете ни использовать count, ни выполнять итерацию с @ foreach

Так что здесь ваша ошибка:

// object
$review = Post::find(1)->reviews()->where('title', 'posts_title')->first();

// collection
$reviews = Post::find(1)->reviews()->where('title', 'posts_title')->get();

on $ отзывы, которые вы можете использовать

@if($reviews->count() > 1)

@foreach($reviews as $review)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...