Laravel 5 如何使用集合获取多个随机行
Laravel 5 how to get many random rows using collections
基于how get random row laravel-5我调整了我的查询,但仍然没有收到预期的结果。
我在数据库中有 20 篇文章,只想随机获取其中的 3 篇文章并显示在页面上。
我的class是这样的:
public function article()
{
$article = DashArticle::where('category', '=', 0)->get()->random(3);
$articleTitle0 = $article[0]->titel;
$articleAutor0 = $article[0]->autor;
$articleAbstract0 = $article[0]->abstract;
$articleSource0 = $article[0]->source;
$articleTitle1 = $article[1]->titel;
$articleAutor1 = $article[1]->autor;
$articleAbstract1 = $article[1]->abstract;
$articleSource1 = $article[1]->source;
$articleTitle2 = $article[2]->titel;
$articleAutor2 = $article[2]->autor;
$articleAbstract2 = $article[2]->abstract;
$articleSource2 = $article[2]->source;
return compact(
'articleTitle0', 'articleAutor0', 'articleAbstract0', 'articleSource0',
'articleTitle1', 'articleAutor1', 'articleAbstract1', 'articleSource1',
'articleTitle2', 'articleAutor2', 'articleAbstract2', 'articleSource2'
);
}
这里是部分视图:
<div id="a-slide" class="carousel slide auto panel-body">
<ol class="carousel-indicators out">
<li class="active" data-slide-to="0" data-target="#a-slide"></li>
<li class="" data-slide-to="1" data-target="#a-slide"></li>
<li class="" data-slide-to="2" data-target="#a-slide"></li>
</ol>
<div class="carousel-inner">
<div class="item active" style="padding: 0 16px;">
<p style="font-size: 16px; font-weight: bold;">{!! $articleTitle0 !!}</p>
<p class="text-muted">{!! $articleAutor0 !!}</p>
<p><strong>Abstract:</strong><br />{!! $articleAbstract0 !!}</p>
<p>
<a href="$articleSource !!}" target="_blank">
{!! $articleSource0 !!}
</a>
</p>
</div>
<div class="item" style="padding: 0 16px;">
<p style="font-size: 16px; font-weight: bold;">{!! $articleTitle1 !!}</p>
<p class="text-muted">{!! $articleAutor1 !!}</p>
<p><strong>Abstract:</strong><br />{!! $articleAbstract1 !!}</p>
<p>
<a href="{!! $articleSource1 !!}" target="_blank">
{!! $articleSource1 !!}
</a>
</p>
</div>
问题是当我让 random = 3
($article = DashArticle::where('category', '=', 0)->get()->random(3);
我收到以下错误:"Undefined offset: 1"
当我使用 random = 20(table 中的总行数)时,它可以工作,但我不会成为任何随机文章,但总是 table 的前 3 行.
如有任何帮助,我将不胜感激!谢谢!
问题是随机方法保留了原始集合中的键。为避免这种情况,您应该获得一个纯值:
$article = DashArticle::where('category', '=', 0)->get()->random(3)->values();
你可以这样得到随机行:
public function article()
{
$article = DashArticle::orderBy(DB::raw('RAND()'))->take(3)->get();
//pass data to view
if(view()->exists('article.list')){
return view('article.list',compact('article'));
}
}
试试这个
$article = DashArticle::where('category', '=', 0)->get()->shuffle()->all();
基于how get random row laravel-5我调整了我的查询,但仍然没有收到预期的结果。
我在数据库中有 20 篇文章,只想随机获取其中的 3 篇文章并显示在页面上。
我的class是这样的:
public function article()
{
$article = DashArticle::where('category', '=', 0)->get()->random(3);
$articleTitle0 = $article[0]->titel;
$articleAutor0 = $article[0]->autor;
$articleAbstract0 = $article[0]->abstract;
$articleSource0 = $article[0]->source;
$articleTitle1 = $article[1]->titel;
$articleAutor1 = $article[1]->autor;
$articleAbstract1 = $article[1]->abstract;
$articleSource1 = $article[1]->source;
$articleTitle2 = $article[2]->titel;
$articleAutor2 = $article[2]->autor;
$articleAbstract2 = $article[2]->abstract;
$articleSource2 = $article[2]->source;
return compact(
'articleTitle0', 'articleAutor0', 'articleAbstract0', 'articleSource0',
'articleTitle1', 'articleAutor1', 'articleAbstract1', 'articleSource1',
'articleTitle2', 'articleAutor2', 'articleAbstract2', 'articleSource2'
);
}
这里是部分视图:
<div id="a-slide" class="carousel slide auto panel-body">
<ol class="carousel-indicators out">
<li class="active" data-slide-to="0" data-target="#a-slide"></li>
<li class="" data-slide-to="1" data-target="#a-slide"></li>
<li class="" data-slide-to="2" data-target="#a-slide"></li>
</ol>
<div class="carousel-inner">
<div class="item active" style="padding: 0 16px;">
<p style="font-size: 16px; font-weight: bold;">{!! $articleTitle0 !!}</p>
<p class="text-muted">{!! $articleAutor0 !!}</p>
<p><strong>Abstract:</strong><br />{!! $articleAbstract0 !!}</p>
<p>
<a href="$articleSource !!}" target="_blank">
{!! $articleSource0 !!}
</a>
</p>
</div>
<div class="item" style="padding: 0 16px;">
<p style="font-size: 16px; font-weight: bold;">{!! $articleTitle1 !!}</p>
<p class="text-muted">{!! $articleAutor1 !!}</p>
<p><strong>Abstract:</strong><br />{!! $articleAbstract1 !!}</p>
<p>
<a href="{!! $articleSource1 !!}" target="_blank">
{!! $articleSource1 !!}
</a>
</p>
</div>
问题是当我让 random = 3 ($article = DashArticle::where('category', '=', 0)->get()->random(3); 我收到以下错误:"Undefined offset: 1"
当我使用 random = 20(table 中的总行数)时,它可以工作,但我不会成为任何随机文章,但总是 table 的前 3 行.
如有任何帮助,我将不胜感激!谢谢!
问题是随机方法保留了原始集合中的键。为避免这种情况,您应该获得一个纯值:
$article = DashArticle::where('category', '=', 0)->get()->random(3)->values();
你可以这样得到随机行:
public function article()
{
$article = DashArticle::orderBy(DB::raw('RAND()'))->take(3)->get();
//pass data to view
if(view()->exists('article.list')){
return view('article.list',compact('article'));
}
}
试试这个
$article = DashArticle::where('category', '=', 0)->get()->shuffle()->all();