#php #mysql #laravel
#php #mysql #laravel
Вопрос:
Необходимо обновить базу столбца слева присоединиться к последней записи. Как, например, ниже
ТАБЛИЦА A:
ID | Имя | СОЗДАНО | ОБНОВЛЕНО | Доставка |
---|---|---|---|---|
1 | P #A | 2021-01-05 00:23:00 |
ТАБЛИЦА B:
ID | TABLE_A_ID | Описание | СОЗДАНО | ПРЕДПОЛАГАЕМАЯ ДОСТАВКА |
---|---|---|---|---|
1 | 1 | Обработка | 2021-01-05 12:00:00 | |
2 | 1 | Упаковка | 2021-01-06 12:00:00 | 2021-01-07 00:23:00 |
3 | 1 | Отправлено | 2021-01-06 12:00:00 | 2021-01-08 00:23:00 |
3 | 1 | Delivere | 2021-01-06 12:00:00 |
Основываясь на приведенных выше таблицах, как я могу перенести предполагаемую доставку из таблицы b в столбец предполагаемой доставки таблицы a?
Приведенный ниже код выдает ошибку. You can't specify target table 'TableA' for update in FROM clause
TableA::leftJoin('table_b as b', function ($join) {
$join->on('tableA.id', '=', 'b.table_a_id');
$join->whereRaw('b.table_a_id = (SELECT a.id FROM table_a as a LEFT JOIN table_b as b on a.id = b.table_a_id WHERE b.estimated_delivery IS NOT NULL GROUP BY a.id ORDER BY b.estimated_delivery DESC LIMIT 1)');
})->update(['table_a.delivery' => DB::raw('b.estimated_delivery')])
Любые предложения по этому поводу будут высоко оценены. Спасибо!
Комментарии:
1. Похоже, это нарушение SSOT ( en.wikipedia.org/wiki/Single_source_of_truth ). Не лучше ли изменить свои запросы, чтобы получить
delivery
информацию из таблицы B?2. ЛЕВОЕ СОЕДИНЕНИЕ в ОБНОВЛЕНИИ — это немного странная вещь.