我正在建立一个应用程序来评估幼儿园的孩子们。 (我的妻子是托儿所老师)。这是基本模型和关系:
class Subevaluation extends Model
{
// fields: id, title, date, classroom, course_id
public function subevaluations(){
return $this->hasMany('App\Subevaluation');
}
}
class Evaluation extends Model
{
// fields: id, child_id, evaluation_id, quotation
public function evaluation(){
return $this->belongsTo('App\Evaluation');
}
}
我的应用程序中有更多模型(儿童,课堂......),但上述2是此问题的重要模型。
现在我可以检索一个选定评估的所有子评估;例如:
$eval = App\Evaluation::find(1);
$subevals = $eval->subevaluations;
在我看来,我可以列出所有的子评估:
@foreach($eval->subevaluations as $subeval)
<td> {{ $subeval->student->name }}</td>
<td> {{ $subeval->date }}</td>
<td> {{ $subeval->quotation }}</td>
@endforeach
我的问题出现了:(鼓号......)
我希望能够列出针对此特定评估/课程的最后5个引文。所以,在@foreach循环中,我想要某种函数,如{{$ subeval-&gt; last5quotations}},它返回一个如下数组:
array{
{
'quot' => 'A',
'date' => '2017-03-01',
'info' => 'info here'
},
{
'quot' => 'C',
'date' => '2017-02-14',
'info' => 'info here'
},
{
'quot' => 'A',
'date' => '2017-01-30',
'info' => 'info here'
},
{
'quot' => 'B',
'date' => '2016-12-04',
'info' => 'info here'
},
{
'quot' => 'A',
'date' => '2016-11-20',
'info' => 'info here'
}
}
这个数组(或者可以是集合)具有给每个孩子的最后5个引用 - 课程
然后我可以循环播放此数组,在视图中显示此信息
我怎样才能在Laravel中实现这一目标? (第5.4版)
谢谢!
答案 0 :(得分:0)
继续你的例子,你可以通过以下方式实现这一目标:
class Evaluation extends Model
{
public function subevaluations()
{
return $this->hasMany(Subevaluation::class);
}
}
$eval = App\Evaluation::find(1);
$last5subevals = $eval->subevaluations()->latest('date')->limit(5);
函数latest($column = 'created_at')
按&#34;添加&#34;顺序查询时间戳的子句。 limit($value)
应该是不言自明的(将LIMIT 5
添加到由这些函数创建的SQL查询中。)
以下是有关Laravel的更多相关信息: https://laravel.com/docs/5.4/queries#ordering-grouping-limit-and-offset
答案 1 :(得分:0)
您可以直接向关系添加查询约束。
$subevals = $eval->subevaluations()->latest('date')->take(5);
请注意,我将关系称为方法而不是属性。此外,latest()
范围将按date
排序,take(5)
等同于SQL LIMIT 5
。