Laravel 订购a";“最后行动”;专栏文章

Laravel 订购a";“最后行动”;专栏文章,laravel,datatable,eloquent,Laravel,Datatable,Eloquent,我已经创建了一个laravel应用程序,其中我们有用户,每个用户在其他表x项上都有“操作”。在我的后端,我向所有用户显示一个数据表: $users = User::all(); 我添加了一列“last action”,显示用户在“operation”表中添加的最后一条记录: ->addColumn('last_action',函数($user){ $lastaction=Operations::where('user',$user->id)->orderBy('last_action','de

我已经创建了一个laravel应用程序,其中我们有用户,每个用户在其他表x项上都有“操作”。在我的后端,我向所有用户显示一个数据表:

$users = User::all();
我添加了一列“last action”,显示用户在“operation”表中添加的最后一条记录:

->addColumn('last_action',函数($user){
$lastaction=Operations::where('user',$user->id)->orderBy('last_action','desc')->first();
if(为null($lastaction)){
返回“无”;
}否则{
$carbonated_date=Carbon::parse($lastaction->last_action);
返回“.$carbonated_date->diffForHumans()”;
}
})
问题是,如果我尝试订购“最后一个操作”列,我的订购顺序错误,如下所示:

  • 说出最后的行动
  • 鲍勃什么都没有
  • 马克2天前
  • 什么都没有收到
  • 亚历克斯什么都没有
  • 汤姆三天前


这里出了什么问题?

最好且正确的方法是采取以下几个步骤:

  • Opration.php
    中添加以下方法:
  • /**
    *应该变异为日期的属性。
    *
    *@var数组
    */
    受保护的$日期=[
    “最后行动”,
    
    ];这里有什么问题?我相信您的order by可以正常工作,也许您希望您的用户列表按上次操作排序?您可以通过
    $users=User::orderBy('last_action','desc')->get()来实现这一点您需要使用特定的日期时间格式,以便允许DataTable对数据进行排序。通常,它是JavaScript(YYYY,MM,DD)本机支持的格式。最后一个操作在另一个存储为datetime的表上。我从另一个存储用户操作的表中执行最后一个操作。嗯,好的,我现在就试试您的解决方案。用户模型必须具有多个关系?是的。有许多&属于
    
        ->addColumn('last_action', function ($user) {
    
            $lastaction = Operations::where('user', $user->id)->orderBy('last_action','desc')->first();
    
            if (is_null($lastaction)) {
                return '<span class="label label-warning">nothing</span>';
            } else {
                $carbonated_date = Carbon::parse($lastaction->last_action);
                return '<span class="label label-success">'.$carbonated_date->diffForHumans().'</span>';
            }
        })