试图获取非对象错误的属性,count总是返回1甚至没有空数组

时间:2017-11-27 05:46:14

标签: laravel

我正在使用datatable显示我的数据,如果是空数组,那么数据表将不会显示。

我试过

@if(count($results) > 0)
    //data show
@foreach($results as $r)
    <p>{{$r->name}}</p>
@endfor
@else
    No result found.
@endif
    //
    // $results is an array

如果为空$ result,则返回错误。如果$ result为空,我如何才能显示自定义消息而不显示DataTable。

5 个答案:

答案 0 :(得分:0)

你应该试试这个:

@if(isset($results) && !empty($results))

    <?php
      print('<pre style="color:red;">');
    print_r($results);
    print('</pre>');


    ?>

  @foreach($results as $r)
   <p>{{$r->name}}</p>
  @endforeach
@else
  No result found.
@endif

答案 1 :(得分:0)

使用isEmpty()检查对象empty或不 -

@if (!$result->isEmpty())

答案 2 :(得分:0)

对于foreach / empty场景,我们确实有一个刀片速记。

@forelse ($results as $r)
    <p>{{ $r->name }}</p>
@empty
    No result found
@endforelse

根据您拥有的代码以及您获得$results的方式的评论,$results应该是stdClass个对象的数组,这意味着不应该发生错误。由于您拥有的代码有限,我无法确定错误是来自该代码。

我的猜测是$results不是数组而是对象。 count(new stdClass) === 1 count(new App\User) === 1等等......

答案 3 :(得分:0)

在控制器级别检查可能更安全,如果$ result为NULL,则返回0

收到收藏后,请检查:

$result = $result ? $result : 0

并返回$ result。

答案 4 :(得分:0)

您正在使用foreach结束endfor循环。它应该以{{1​​}}结束。

如果这不能解决您的错误,请使用您的控制器代码更新您的问题。结果变量是集合对象吗?