PHP Laravel返回查看null变量

时间:2016-04-26 12:07:25

标签: php laravel laravel-5

我有方法在db中获取单词形式搜索栏和查询,然后返回视图

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

这是控制器代码

<?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>';
    }

2 个答案:

答案 0 :(得分:4)

您的代码中存在多个错误。对于初学者,您的查询将始终返回一个元素,而我想要查询所有结果。您应该使用get函数来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'));
        }

视图:

因为您使用了eloquent,所以您不必使用数组键来选择值,您应该使用对象属性。像这样:

<?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>';
    }

答案 1 :(得分: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