Php 基于小波变换的Laravel滤波器只有一个关系

Php 基于小波变换的Laravel滤波器只有一个关系,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我正在为这件事大发雷霆,我觉得我已经尝试了所有的方法 这是我的问题 我有两张桌子 用户 ID | FIRSTNAME | EMAIL_ADDRESS 1 | Joe Bloggs | joe@bloggs.com ID | USER_ID | STATUS | DATE 1 | 1 | 'In' | 2018-06-04 09:01:00 2 | 1 | 'Out' | 2018-06-04 09:00:00 状态 ID | FIRSTNAME

我正在为这件事大发雷霆,我觉得我已经尝试了所有的方法

这是我的问题

我有两张桌子

用户

ID | FIRSTNAME   | EMAIL_ADDRESS
1  | Joe Bloggs  | joe@bloggs.com 
ID | USER_ID | STATUS | DATE
1  |  1      | 'In'   | 2018-06-04 09:01:00
2  |  1      | 'Out'  | 2018-06-04 09:00:00
状态

ID | FIRSTNAME   | EMAIL_ADDRESS
1  | Joe Bloggs  | joe@bloggs.com 
ID | USER_ID | STATUS | DATE
1  |  1      | 'In'   | 2018-06-04 09:01:00
2  |  1      | 'Out'  | 2018-06-04 09:00:00
从上表可以看出,每个用户可以有许多状态',但每个用户必须有一个最新状态,我就是这样做的(如果我做错了,请告诉我)

然后,我在视图中打开一个表单,它通过
$request
将过滤器传递给控制器

我需要能够使用过滤器,并将其应用于1最新状态。例如,如果有人搜索日期
2018-06-04 09:00:00
和用户id
1
,我需要它不显示任何结果,因为该用户的1条最新记录与该日期不匹配,但此时,如果不匹配,它将跳过最近的一条,并获得下一条匹配的记录

我试过似乎每种方法,我试过这样的方法

$users = Users::with(['StatusCurrent' => function($query){
  $query->where('status.status', 'In');
}])->get();
$users = Users::has('StatusCurrent')->paginate(10);

    if(!empty($request->statusIn)){
        $users = $users->filter(function ($item){
            $item = $item->statusCurrent->status == 'in'; 
            return $item;
        });
    }

return $users;
它获取正确的最近一行,但是如果我尝试
status.status,“out”
,它只会跳过并获取状态为out的记录编号2

我也试过这样做

$users = Users::with(['StatusCurrent' => function($query){
  $query->where('status.status', 'In');
}])->get();
$users = Users::has('StatusCurrent')->paginate(10);

    if(!empty($request->statusIn)){
        $users = $users->filter(function ($item){
            $item = $item->statusCurrent->status == 'in'; 
            return $item;
        });
    }

return $users;
这非常有效,但是当尝试为过滤器附加任何
GET
参数时,分页会中断

通俗易懂的英语


我需要能够获取该用户的最新状态,然后在获得该状态后,我需要能够对其应用where语句/筛选器/参数,如果它们不匹配,则完全忽略该用户。

您可以先获取ID,然后使用筛选器执行查询:

$status_id = Users::find($user_id)->statusCurrent()->id;
现在使用
whereHas
子句中的
$status\u id
执行实际查询:

$users = Users::with('statusCurrent')
    ->whereHas('statusCurrent', function($query) use($status_id) {
        $query->where('status.status', 'In')
              ->where('id',$status_id);
    })->get();

必须将联接与子查询组合:

$users = User::select('users.*')
    ->join('status', 'users.id', 'status.user_id')
    ->where('status.status', 'in')
    ->where('status.id', function($query) {
        $query->select('id')
            ->from('status')
            ->whereColumn('user_id', 'users.id')
            ->orderByDesc('date')
            ->limit(1);
    })
    ->get();

您是否尝试将限制(1)更改为第一个()?我认为这可能与问题有关。