订购"最后一次行动"专栏问题

时间:2017-02-01 11:45:20

标签: laravel datatable eloquent

我创建了一个laravel应用程序,其中我们有用户,每个用户都有其他表x条目作为"操作"。在我的后端,我向所有用户显示数据表:

$users = User::all();

我添加了一个列"最后一个动作"显示用户在"操作"上添加的最后一条记录表:

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

问题在于,如果我尝试订购&#34;最后一次行动&#34;第一栏错误的订单如下:

  • 姓名最后一次行动
  • Bob nothing
  • Mark 2天前
  • Roger nothing
  • Alex nothing
  • Tom 3天前

...

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

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

  1. Opration.php中添加以下方法:
  2. /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'last_action',
    ];

    1. 在同一模型中,您可以创建范围函数:
    2. /**
       * Order users by last action.
       * 
       * @param $query
       * @return mixed
       */
      public function scopeByLastAction($query)
      {
          return $query->orderBy('last_action', 'desc');
      }

      1. 然后您可以简单地使用它User::operations()->byLastAction()->get();
      2. 这是正确的方法,但您需要确保在User模型中有关系函数。