PHP Laravel返回查看空变量

问题描述:

我有方法让Word形式搜索栏和数据库查询,然后返回查看PHP Laravel返回查看空变量

但它显示空表虽然我检查空变量

这是控制器代码

<?php 

    public function getSearch($title) { 
      $words = Word::where('title', $title)->first(); 
      if (empty($words)) { 

       abort(404); 
      } 
      return view('dict.index', compact('words')); 

     } 

这里是视图代码

<?php 

    foreach ($words as $row) { 
     echo '<tr>'; 
     echo '<td>' . $row['title'] . '</td>'; 
     echo '<td>' . $row['meaning'] . '</td>'; 
     echo '<td>'; 
     for ($i = 0; $i < $row['rate']; $i++) { 
      echo '<img src="/images/pjdict/star.png" width="20" height="20">'; 
     } 
     echo '</td>'; 
     echo '</tr>'; 
    } 
+0

我建议为什么我的观点有空表,因为 如果(空($字)){ \t \t \t中止(404); \t \t} 没有输入 –

+0

我怀疑因为我使用 - > first(); ?? –

有几个mistak在你的代码中。对于初学者来说,您的查询将始终返回一个元素,而我希望您查询所有结果。您应该对查询中的所有行使用获取函数get

在雄辩集合上使用empty永远不会返回false,因为您将始终收到一个雄辩的对象或集合。要检查您的收藏是否有任何价值,您可以使用isEmpty函数。

结果应该是这样的:

<?php 

    public function getSearch($title) { 
      $words = Word::where('title', $title)->get(); 
      if ($words->isEmpty()) { 
       abort(404); 
      } 

      return view('dict.index', compact('words')); 
     } 

对于视图:

由于您使用的口才很好,你不必使用数组键来选择值,你应该使用对象属性。像这样:

<?php 

    foreach ($words as $row) { 
     echo '<tr>'; 
     echo '<td>' . $row->title . '</td>'; 
     echo '<td>' . $row->meaning . '</td>'; 
     echo '<td>'; 
     for ($i = 0; $i < $row->rate; $i++) { 
      echo '<img src="/images/pjdict/star.png" width="20" height="20">'; 
     } 
     echo '</td>'; 
     echo '</tr>'; 
    } 
+0

好吧,当我改变得到它确定, 但我混淆之间的第一个和得到 首先返回一个元素,它的意思是,当我应该使用first(); –

要添加Jerodev的答案,一个更优雅的方式来作曲你的看法将是使用刀片语法。

@foreach($words as $word) 
<tr> 
    <td>{{ $word->title }}</td> 
    <td>{{ $word->meaning }}</td> 
    <td> 
    @for($i=0; $i<$word->rate; $i++) 
     <img src="/images/pjdict/star.png" width="20" height="20" /> 
    @endfor 
    </td> 
</tr> 
@endforeach 

请记住在您的意见中添加.blade后缀。例如,dict.index.blade.php

https://laravel.com/docs/5.2/blade