Таким образом, у меня есть следующая проблема, касающаяся larvel eloquent, когда я хочу использовать поле таблицы родителя в вложенном или вложенном запросе
Допустим, моя структура таблицы и данные здесь: * Схема SQL здесь
CREATE TABLE `table_test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NULL DEFAULT '0',
`effective_date` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
;
INSERT INTO `table_test` (`id`, `user_id`, `effective_date`) VALUES
(1, 1, '2019-01-04 16:03:21'),
(2, 1, '2019-02-04 16:03:21'),
(3, 1, '2019-03-04 16:03:21'),
(4, 1, '2019-04-04 16:03:21'),
(5, 1, '2019-05-04 16:03:21'),
(6, 2, '2019-01-04 16:03:21'),
(7, 2, '2019-03-04 16:03:21'),
(8, 3, '2019-01-04 16:03:21'),
(9, 3, '2019-03-04 16:03:21');
и мой запрос mysql
select * from `table_test`
where effective_date = (
select subtable.effective_date from `table_test` as subtable
where subtable.user_id = `table_test`.user_id
and subtable.effective_date <= now()
order by subtable.effective_date desc limit 1
);
Я хочу: нам требуется ТОЛЬКО одна последняя дата / запись каждого пользователя, где дата вступления в силу <= сегодняшняя дата в laravel </p>
мой код в контроллере находится в контроллере:
$table : TableTest::query()
$table = $table->effectivedate()->get();
и в модели
function scopeEffectivedate($query) {
$current_date = Carbon::now()->toDateTimeString();
return $query->where('effective_date',function($query) use($current_date) {
$query->select('table_alias.effective_date')
->from('table_test as table_alias')
->whereColumn('table_alias.user_id','table_test.user_id')
->where('table_alias.effective_date','<=',$current_date)
->orderBy('table_alias.effective_date', 'DESC')->first();
});
Моя версия Laravel Framework 5.7.28 и ошибка, которую я получаю
Неизвестный столбец 'table_test.user_id' в 'предложении where'