Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php LARAVEL ORM:为每个用户选择不同的日期_Php_Mysql_Laravel_Laravel 5.4 - Fatal编程技术网

Php LARAVEL ORM:为每个用户选择不同的日期

Php LARAVEL ORM:为每个用户选择不同的日期,php,mysql,laravel,laravel-5.4,Php,Mysql,Laravel,Laravel 5.4,我有一张名为“访客”的桌子: visitors : (id , user_id , ip , created_at , route , refer ) 我在包装链接的中间件中为每个页面访问存储一行 我想在我的管理面板中显示这些,但是你可以想象有很多,所以我想为每个用户显示每天的第一次访问,就像我在db中看到的一样 1 , 356 , 127.0.0.1 , 2017-08-30 22:41:49 1 , 356 , 127.0.0.1 , 2017-08-30 22:50:49 1 , 35

我有一张名为“访客”的桌子:

visitors : (id , user_id , ip  , created_at , route , refer )
我在包装链接的中间件中为每个页面访问存储一行

我想在我的管理面板中显示这些,但是你可以想象有很多,所以我想为每个用户显示每天的第一次访问,就像我在db中看到的一样

1 , 356 , 127.0.0.1 , 2017-08-30 22:41:49
1 , 356 , 127.0.0.1 , 2017-08-30 22:50:49
1 , 356 , 127.0.0.1 , 2017-08-30 22:53:49
1 , 356 , 127.0.0.1 , 2017-08-30 23:11:49
1 , 400 , 127.0.0.1 , 2017-08-30 23:50:49
查询结果应该是

1 , 356 , 127.0.0.1 , 2017-08-30 22:41:49
1 , 356 , 127.0.0.1 , 2017-08-30 23:11:49
1 , 400 , 127.0.0.1 , 2017-08-30 23:50:49
所以我想要的是

DISTINCT(DATE(created_at))
但这将影响所有用户。。我希望它能影响每个用户


这很复杂,我不知道我该怎么做我想你可以这样做:

DB::table('visitors')
   ->distinct('created_at')
   ->orderBy('created_at', 'asc')
   ->get();

另一种方法是为
用户
实体添加额外字段,如
首次访问
,如果它很重要

我想您可以尝试以下方法:

DB::table('visitors')
   ->distinct('created_at')
   ->orderBy('created_at', 'asc')
   ->get();

另一种方法是为
用户
实体设置附加字段,如
首次访问
如果重要

如前所述,您希望使用
MIN
功能获取他们第一次登录时的信息,使用
分组依据
根据用户id对其进行分组:

DB::table('visitors')
    ->select(['user_id', DB::raw('MIN(created_at)')])
    ->groupBy('user_id')
    ->get();

如果需要,可以在其他列中添加,但键是
DB::raw('MIN(created_at)
,它将获得每个用户最早创建的时间戳。
DB::raw
将完全按照您指定的方式传入该字符串。

如上所述,您希望使用
MIN
函数获取他们第一次登录的时间,使用
groupby
按用户id对其进行分组:

DB::table('visitors')
    ->select(['user_id', DB::raw('MIN(created_at)')])
    ->groupBy('user_id')
    ->get();
如果需要,可以在其他列中添加,但键是
DB::raw('MIN(created_at)
,它将获得每个用户最早创建的时间戳。
DB::raw
将完全按照您指定的方式传入该字符串。

试试这个

 DB::table('visitors')->select('id','user_id','ip','created_at')->groupBy(DB::raw('DATE(created_at)'))->groupBy('user_id')->get();
这将在一天内提供唯一的用户。

试试这个

 DB::table('visitors')->select('id','user_id','ip','created_at')->groupBy(DB::raw('DATE(created_at)'))->groupBy('user_id')->get();

这将在一天内提供唯一的用户。

查看
MIN
分组依据。无
DISTINCT
需要查看
MIN
分组依据
。没有
DISTINCT
needthanx,但这将不会影响用户基本上只是第一次访问他们,为首次访问添加另一个字段将是planB@hretic因此,您可以使用
distinct
min
groupby
查询iThanx,但这不会影响用户基本上只是第一次访问他们,为首次访问添加另一个字段将是planB@hretic因此,您可以使用
distinct
min
groupby
查询itthnx,但正如我所说,我希望每天为每个用户创建最早的。。我想这会给我最早的时间,不管是哪一天还是我弄错了?这是为了整体。如果您只需要当前日期,则添加
->whereRaw('created_>=CURDATE()')
,这样它将获得当天登录的任何用户的第一次登录。另一方面,如果您需要每一天,则添加另一个groupBy
->groupBy(DB::raw('date(created_at))
thnx,但正如我所说的,我希望每天为每个用户创建最早的。。我想这会给我最早的时间,不管是哪一天还是我弄错了?这是为了整体。如果您只需要当前日期,则添加
->whereRaw('created_>=CURDATE()')
,这样它将获得当天登录的任何用户的首次登录。另一方面,如果您需要每一天,则添加另一个groupBy
->groupBy(DB::raw('date(created_at))