Это сработало для меня:
Если я правильно понимаю ваш вопрос, то я думаю, что самый простой способ добиться этого будет следующим:
Обратите внимание на использование whereraw вместо куда, чтобы мы могли использовать прямой
mySql код
Logbook::whereHas('LogbookEntries', function($q) {
$q->whereraw('date_format(date(end_date),"%Y-%m-%d") = date_format(date(start_date),"%Y-%m-%d") + interval 1 day')
})
Я проверил это на своей системе, и это сработало. Однако мои временные метки были в формате Y-m-d ЧЧ: мм: ii, поэтому мне понадобился формат date_ для их изменения. Вам может не понадобиться это. Поэтому вы можете попробовать следующее:
Logbook::whereHas('LogbookEntries', function($q) {
$q->whereraw('date(end_date) = date(start_date) + interval 1 day')
})
Поскольку это было бы намного аккуратнее.
По сути, мы получаем записи, в которых end_date совпадает с start_date + 1 day. Вы были близки, но просто не совсем там.
Моя система, чтобы вы могли видеть, как она работает:
Без оператора whereraw:
>>> Task::Select('start_date','end_date')->get();
=> Illuminate\Database\Eloquent\Collection {#3325
all: [
App\Task {#3307
start_date: "2018-12-20 08:00:00",
end_date: null,
},
App\Task {#3291
start_date: "2018-12-18 00:00:00",
end_date: "2018-12-19 00:00:00",
},
App\Task {#3318
start_date: "2018-12-19 00:00:00",
end_date: "2019-01-03 00:00:00",
},
App\Task {#3319
start_date: "2018-12-20 00:00:00",
end_date: "2018-12-21 00:00:00",
},
App\Task {#3310
start_date: "2018-12-20 00:00:00",
end_date: "2018-12-21 00:00:00",
},
App\Task {#3317
start_date: "2018-12-20 14:43:16",
end_date: "2018-12-21 14:43:16",
},
App\Task {#3316
start_date: "2018-12-20 14:45:27",
end_date: "2018-12-27 14:45:27",
},
App\Task {#3315
start_date: "2018-12-20 14:46:48",
end_date: "2018-12-24 14:46:48",
},
App\Task {#3313
start_date: "2018-12-21 09:25:24",
end_date: "2018-12-24 09:25:24",
},
App\Task {#3298
start_date: "2019-01-02 08:10:19",
end_date: "2019-01-16 08:10:19",
},
],
}
С оператором whereraw:
>>> Task::Select('start_date','end_date')->whereraw('date_format(date(end_date),"%Y-%m-%d") = date_format(date(start_dat
e),"%Y-%m-%d") + interval 1 day')->get();
=> Illuminate\Database\Eloquent\Collection {#3314
all: [
App\Task {#3312
start_date: "2018-12-18 00:00:00",
end_date: "2018-12-19 00:00:00",
},
App\Task {#3309
start_date: "2018-12-20 00:00:00",
end_date: "2018-12-21 00:00:00",
},
App\Task {#3320
start_date: "2018-12-20 00:00:00",
end_date: "2018-12-21 00:00:00",
},
App\Task {#3329
start_date: "2018-12-20 14:43:16",
end_date: "2018-12-21 14:43:16",
},
],
}