2016-04-26 113 views
2

我有方法讓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(); ?? –

回答

4

有幾個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(); –

0

要添加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