Я пытаюсь сделать расширенное соединение с laravel, которое выглядит так:
$locations = DB::table('location')
->select('location.location_time',
'heart_rate.heartrate'
)
->leftJoin('heart_rate' , function($join) use ($data) {
$join->on('heart_rate.user_id', '=', DB::raw('1'))
->where('heart_rate.time', '>', DB::raw('(location.location_time - INTERVAL 5 SECOND)')) // ->whereBetween('heart_rate.time', array(, DB::raw('location.location_time + 2 SECOND')));
->where('heart_rate.time', '<', DB::raw('(location.location_time + INTERVAL 5 SECOND)'));
})
->where('location.user_id', '=', DB::raw('1'))
->whereBetween('location.location_time', array( "2015-04-24 00:00:00", "2015-04-25 23:59:59" ))
->get();
который возвращает следующее: [{"location_time":"2015-04-24 14:00:00","heartrate":null}]
Однако, когда я позволил ему вывести запрос и ввести его напрямую в mySQL, я получил следующий результат: , как это должно быть, так как таблицы из базы данных:
Таблица ‘heart_rate’:
Таблица ‘местоположение’:
SQL-запрос, который я дам
SELECT
`location`.`location_time`,
`heart_rate`.`heartrate`
FROM
`location`
LEFT JOIN `heart_rate`
ON `heart_rate`.`user_id` = 1
AND `heart_rate`.`time` > (
location.location_time - INTERVAL 5 SECOND
)
AND `heart_rate`.`time` < (
location.location_time + INTERVAL 5 SECOND
)
WHERE `location`.`user_id` = 1
AND `location`.`location_time` BETWEEN "2015-04-24 00:00:00"AND "2015-04-25 23:59:59"
Задача ещё не решена.
Других решений пока нет …