在Laravel中没有获得带有Latest()的最新记录

时间:2018-08-12 17:22:44

标签: php laravel

这是我的代码,用于处理对视图的数据库请求:

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'));

1 个答案:

答案 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来检索用户。