Я нашел пару вопросов в Интернете, похожих на мой, но мне не удается найти рабочий ответ.
У меня есть 2 таблицы
ПОЛЬЗОВАТЕЛЬ
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
Мне нужно иметь возможность объединить две таблицы вместе, но получить только самый последний столбец состояния можно по date
,как это
ID | FIRSTNAME | EMAIL_ADDRESS | STATUS_ID | STATUS | DATE
1 | Joe Bloggs | Joe@bloggs.com | 1 | 'In' | 2018-06-04 09:01:00
Мне нужно иметь возможность запускать дополнительные аргументы построителя запросов, такие как where
, потому что у пользователя есть возможность передавать фильтры и параметры поиска, если они требуются, чтобы иметь возможность использоватьстолбцы таблицы состояния в моем конструкторе запросов, я делаю объединение, как это
$users = Users::join('status', 'status.user_id', '=', 'user.id')->distinct('user.id');
, которое затем позволяет мне передавать любые параметры поиска, если они мне нужны
if(!empty($request->search)){
$param = $request->search;
$users = $users->where(function($query) use ($param){
$query->where('users.firstname', 'like', '%'.$param.'%')
->orWhere('users.email_address', 'like', '%'.$param.'%');
});
}
if(!empty($request->dateFrom)){
if(!empty($request->dateTo)){
$users = $users->whereRaw('DATE(status.date) BETWEEN ? AND ?', [$request->dateFrom, $request->dateTo]);
} else {
$users = $users->whereRaw('DATE(status.date) BETWEEN ? AND DATE(NOW())', [$request->dateFrom]);
}
}
Затемзапустите мой get()
в конце
if($method == 'paginate'){
$users = $users->paginate(10);
} else {
$users = $users->get();
}
Это вернет следующее
ID | FIRSTNAME | EMAIL_ADDRESS | STATUS_ID | STATUS | DATE
1 | Joe Bloggs | Joe@bloggs.com | 1 | 'In' | 2018-06-04 09:01:00
2 | Joe Bloggs | Joe@bloggs.com | 1 | 'Out' | 2018-06-04 09:00:00
Мне нужно иметь возможность использовать столбцы сторонней таблицы в качестве аргументов в моих Where
функциях,но мне нужно только вернуть 1 строку на пользователя.Как запустить объединение, но вернуть только 1 строку для каждого из моих пользователей?