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>';
}
答
有几个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
我建议为什么我的观点有空表,因为 如果(空($字)){ \t \t \t中止(404); \t \t} 没有输入 –
我怀疑因为我使用 - > first(); ?? –