这是我的代码,用于处理对视图的数据库请求:
public function index()
{
$user = User::find(Auth()->id());
$tasks = Task::latest()->get();
$comments = Comment::all();
return view('layouts.index', compact('tasks', 'user', 'comments'));
}
这将显示每个用户的所有任务以及相关评论。
在添加带有用户ID的$user
变量之前,我收到了所有旧任务之前的所有最新任务。情况不再如此。
$tasks = Task::latest()->get();
为什么我要获得最新的记录而不是最新的记录?
我的观点:
@if (count($tasks) > 0)
@foreach($user->tasks as $task)
<div class="tasks">
<a href="{{ route("tasks.show", ["id" => $task->id]) }}"><h4><strong>{{$task->title}} </strong></h4></a>
<p>Description: {{$task->description}}</p>
<strong>Task created: {{$task -> created_at -> diffForHumans()}}</strong>
<hr>
<p>{{count($task->comments)}} comments</p>
<a href="{{ route("tasks.edit", ["id" => $task->id]) }}"><button class="btn btn-outline-light">Edit</button></a>
{!! Form::open(['action' => ['TasksController@destroy', $task->id],'method' => 'POST', 'class'=> 'float-right']) !!}
{{Form::hidden('_method','DELETE')}}
{{Form::submit('Delete', ['class' => 'btn btn-outline-danger'])}}
{!! Form::close() !!}
</div>
@endforeach
工作版本:
$user = User::where('id',Auth()->id())->with(['tasks' => function ($query) {
$query->latest();
}])->first();
$comments = Task::where('user_id',Auth()->id())->with(['comments' => function ($query) {
$query->latest();
}])->first();
return view('layouts.index', compact('user', 'comments'));
答案 0 :(得分:1)
您正在遍历$user->tasks
而不是$tasks
,后者尚未排序。这就是为什么您首先看到最早的结果的原因。
要订购$user->tasks
,您可以使用eager loading:
$user = Auth::user();
$user->load(['tasks' => function ($query) {
$query->latest();
}]);
$user->load(['comments' => function ($query) {
$query->latest();
}]);
在此示例中,我使用Auth
facade来检索用户。