Как использовать поле родительской таблицы БД в laravel вложенных запросов - PullRequest
0 голосов
/ 04 апреля 2019

Таким образом, у меня есть следующая проблема, касающаяся 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'

...