我试图按created_at的降序对每个用户的测试进行排序。我在模板中尝试过,但没有成功。这些是我的表格:
| users | | courses | | tests |
| ---------- | |------------| |------------|
| id | | id | | id |
| name | | name | | name |
| created_at | | created_at | | created_at |
| user_id | | course_id |
用户有很多课程,一个课程有很多测试。我想把所有的测试按created_at的降序排列。
我在我的模板中尝试过:
@foreach(User::find($user->id)->courses as $course)
@foreach(Course::find($course->id)->tests as $test)
<p>Name: {{$test->name}}</p>
<p>Date: {{$test->created_at}}</p>
@endforeach
@endforeach
编辑:这是我的模型
User.php
public function courses()
{
return $this->hasMany('Course');
}
Course.php
public function user()
{
return $this->belongsTo('User');
}
public function test()
{
return $this->hasMany('Test');
}
Test.php
public function courses()
{
return $this->belongsTo('Course');
}
你可以试试这个,在你的Controller
:
$users = User::with(array('courses.tests' => function($query) {
$query->orderBy('tests.created_at', 'desc');
}))->find($user->id);
然后加载视图并像这样传递$user
对象:
return View::make('your_view_name')->withuser($user);
然后在你的view
尝试这样做:
@foreach($user->courses->tests as $test)
<p>Name: {{ $test->name }}</p>
<p>Date: {{ $test->created_at }}</p>
@endforeach
您可以简单地将orderBy命令添加到查询中,如:
@foreach($user->courses as $course)
@foreach($course->tests()->orderBy('created_at', DESC)->get() as $test)
<p>Name: {{$test->name}}</p>
<p>Date: {{$test->created_at}}</p>
@endforeach
@endforeach
看,这不是一个很好的做法,使查询在视图中,所以我改变了你的查询在一些变量,你应该在你的控制器设置。还要将test()方法更改为tests(),因为它是一对多关系,使用复数作为方法名会更清楚。