Php 访问视图中的集合时尝试获取非对象的属性
我编写了一个控制器来发送Post模型及其类别和图片:Php 访问视图中的集合时尝试获取非对象的属性,php,laravel,Php,Laravel,我编写了一个控制器来发送Post模型及其类别和图片: class HomeController extends Controller { public function index () { $latestPosts = Post::with([ 'latestPicture', 'categories' =&g
class HomeController extends Controller
{
public function index ()
{
$latestPosts =
Post::with([
'latestPicture',
'categories' => function ($query) {
$query->select(['categories.cat_id', 'name']);
}
])
->take(12)->orderBy('created_at', 'desc')
->get(['post_id', 'post_title', 'post_alias', 'post_content', 'comments_count', 'created_at']);
// dd($latestPosts) ;
return view('main.pages.home', ['latestPosts' => $latestPosts]);
}
}
在我看来,为了使用最新的帖子,我写下如下:
@if (!$latestPosts->isEmpty())
@foreach($latestPosts as $post)
@if( key($latestPosts) <3)
<!-- Some HTML -->
@endif
@endforeach
@endif
问题是什么?如何在视图中访问该集合?我发现在访问视图中的Post Model属性时有一个输入错误 我必须使用最新图片名称,而不是最新图片
我纠正了它,一切都正常。这两件事我宁愿做得不同于你现在所做的,这可能会消除你的错误,因为你不必使用isEmpty()属性。您可以使用
@forelse
语句代替@if
语句,如:
@forelse($latestPosts as $key => $post)
@if($key <= 3)
<!-- Some HTML -->
@endif
@empty
@endforelse
而不是@if(!$latestPosts->isEmpty())
,但后者只是为了让代码更清晰、更易于阅读。粘贴dd($latestPosts)
的结果将使调试更加容易。
即使你已经纠正了错字,我花了更长的时间来张贴,我认为你应该考虑一些被提及的事情你的用法是正确的。您确定导致错误的行实际上是具有
@if
条件的行吗?另外,不需要@if
条件,因为空集合不会迭代任何内容而不会抛出任何错误。您可以尝试@if(empty($latestPosts))
@Saad fair point,但是查询生成器的get
方法始终返回集合实例,即使其中没有项,尽管如此,isEmpty
方法还是可用的。我认为@if(key($latestPosts)也可以,如果你想访问集合索引,你可以像@foreach($I=>$post)一样将它传递到@if($I<3)中
。但是如果您确实想只显示集合中的前3个元素,可以使用@foreach($latestPosts->take(3)as$i=>$post)
并删除@if
条件。
@forelse($latestPosts as $key => $post)
@if($key <= 3)
<!-- Some HTML -->
@endif
@empty
@endforelse
@unless($latestPosts->isEmpty())
@foreach()
@endforeach
@endunless