Laravel报告错误“参数必须是实现Countable的数组或对象”

时间:2018-08-04 03:02:15

标签: laravel-5.6

这是错误:

"count(): Parameter must be an array or an object that implements 
Countable (View: C:\xampp\htdocs\blog\resources\views\inc\sidebar.blade.php)"

这是我的views / inc / sidebar.blade.php:

@if(count($articles)>0)
    @foreach($articles as $article)
        {{$article->title}}
    @endforeach
@endif

这是我的控制人:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Article;

class HomepageController extends Controller
{
   public function sidebar(){
        $articles = Article::orderBY('created_at', 'desc')->where('active', '1')->take(2)->get();
        return view('inc.sidebar')->with('articles', $articles);
    }
}

在我的views / pages / view_article.blade.php

@extends('layouts.layout')
@section('content')

<div class="container">
    <div class="row no-gutters" style="margin-top: 10px;margin-left: 5px;margin-right: 5px; min-height: 450px;">
        <div class="col-md-9 tex-justify">
            <table class="table-responsive">
                <tr><td>{{$articles->title}}</td></tr>
                <tr><td>{{$articles->created_at->format('M d Y')}}</td></tr>
            </table>
            <img src="/img/{{$articles->img_article}}">{!!$articles->body!!}</div>
        </div>
        <div class="col-md-3">
            @include('inc.sidebar')
        </div>
    </div>
</div><br>
@endsection

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

使用orderBY而不是orderBy可能是问题所在,但如果不是问题,请尝试替换:

$articles = Article::orderBY('created_at', 'desc')->where('active', '1')->take(2)->get();

具有:

$articles = Article::orderBy('created_at', 'desc')->where('active', '1')->take(2)->get()->all();

其背后的原因是Illuminate\Database\Query\Builder::get返回一个Illuminate\Support\Collection,而不是一个数组,而Illuminate\Support\Collection::all返回一个直接数组,其中包含与count一起使用的集合中的项目

答案 1 :(得分:0)

使用@if(isset($articles[0]->id)代替@if(count($articles)>0)