带有if条件的Laravel集合

时间:2017-08-07 02:47:03

标签: php laravel

我使用laravel collection random来获取单个帖子中的其他帖子,但问题是当我没有超过6个帖子时我会得到错误 You requested 6 items, but there are only 1 items in the collection.

所以现在我需要制作一个if语句来说明从0到6的随机帖子,这意味着如果我只有一个帖子而且我在该帖子中看到了如此忽略获取其他帖子(原因)没有其他帖子!)如果我总共有2个帖子只能获得其他帖子等等......直到最多6个帖子随机顺序。

这是我的功能:

public function show($slug) {
      $post = Post::where('slug', $slug)->firstOrFail();
      $postfeatures = Post::all()->random(6);
      $subcategories = Subcategory::with('posts')->get();
      $categories = Category::all();
      $advertises = Advertise::inRandomOrder()->where('status', '1')->first();
      return view ('frontend.single', compact('post', 'categories', 'subcategories', 'postfeatures', 'advertises'));
    }

以下是我的观点:

<ul class="gallery">
   @foreach($postfeatures as $postss)
     <li><a data-toggle="tooltip" data-placement="top" title="{{ $postss->title }}" href="{{ route('frontshow', $postss->slug ) }}"><img src="{{ url('images/') }}/{{ $postss->image }}" class="img-responsive" alt="{{ $postss->title }}"></a></li>
   @endforeach
</ul>

感谢。

2 个答案:

答案 0 :(得分:2)

您可以计算您的收藏品

$count = count(Post::all());
if($count > 6){
$postfeatures = Post::all()->random(6);
}else{
$postfeatures = Post::all()->random($count);
}

希望有所帮助!

答案 1 :(得分:0)

对于任何遇到此问题的人,公认的答案是真正的举手之劳,并且在具有大量数据的现实项目中将不起作用。

相反,您可以执行以下操作:

$builder = Post::query();
$postFeatures = $builder
                 ->inRandomOrder()
                 ->when($builder->count() > 6, function ($query) {
                       return $query->limit(6)
                 })->get();

这将确保sql只返回我们实际需要的内容,而不是记录中所有可能的帖子。