Я все еще новичок в этой среде laravel, поэтому у меня возникла проблема, когда я не смог обновить столбец «updated_at», который автоматически создается миграцией laravel. Я хочу изменить значение на текущее время, когда я нажимаю кнопку. Я пробовал несколько способов из похожих вопросов, но, похоже, это не работает, например, с помощью «-> update ()», «-> save ()» или «-> touch ()».
синтаксис для обновления в контроллере
$check = \DB::table('queueTable')->where('category',$catName2)->where('status','Active')->where('skipped','0')->whereDate('created_at','=',now())->orderBy('queue','ASC')->limit(1);
$counter = \DB::table('queueTable')->where('category',$catName2)->where('status','Inactive')->whereDate('created_at','=',now())->count();
\DB::table('CurrentQueue')->where('id', 2)->update(['DoneQueue' => $counter+1]);
$check->update(['status' => 'Inactive']);
$check->update(['updated_at' => now()->format('Y-m-d H:i:s')]);
моя миграция
Schema::create('queueTable', function (Blueprint $table) {
$table->id();
$table->string('category');
$table->integer('queue')->default('0');
$table->string('status');
$table->integer('skipped')->default('0');
$table->timestamps();
});
было бы очень признательно, если бы кто-нибудь мог любезно объяснить, где я ошибаюсь. Заранее спасибо.
Я хочу обновить значение «updated_at» до текущего времени, когда я нажимаю кнопку
если вы позвоните $movel->save()
или $model->update()
, updated_at
будет автоматически обновлен
Посмотрите документацию: «По умолчанию Eloquent ожидает, что столбцы created_at и updated_at существуют в соответствующей таблице базы данных вашей модели. Eloquent автоматически установит значения этих столбцов при создании или обновлении моделей». Красноречивый: временные метки
но по какой-то причине мой столбец updated_at не обновляется автоматически, поэтому я спрашиваю, есть ли какой-либо возможный способ изменить таблицу
это только вставка значения (временных меток) в столбцы «created_at» и «updated_at» одновременно с записью данных в таблицу в первый раз.
Вы уверены, что $check
на самом деле результат? Потому что ->whereDate('created_at','=',now())
кажется очень рискованным способом что-то выбрать. Может быть, $check
ничего не соответствует, и поэтому ваш update()
ничего не делает?
@Don'tPanic, $check
действительно возвращает значение, которое я хочу, и я использовал дамп var для проверки, но если вы считаете, что это может быть причиной, я попытаюсь найти другой способ получить результат.
Отвечает ли это на ваш вопрос? Красноречивая модель не обновляется updated_at timestamp
Да, после некоторых попыток кажется, что мой столбец updated_at
не обновляется, потому что я использую построитель запросов вместо модели. Спасибо за ваше любезное объяснение.
Обновите свою запись с помощью модели, она автоматически обновит «updated_at». Измените код в вашем контроллере:
$check = queueTable::where('category',$catName2)->where('status','Active')->where('skipped','0')->whereDate('created_at','=',now());
$counter = $check->count();
$check = ->orderBy('queue','ASC')->first();
CurrentQueue::where('id', 2)->save(['DoneQueue' => $counter+1]);
$check->save(['status' => 'Inactive']);
Примечание. Если вы не используете модель, сначала создайте Models queueTable, CurrentQueue
Хорошо, спасибо, попробую этот метод, отпишусь о результате
updated_at
поле обновляется при каждом обновлении базы данных (конкретный столбец). Вам не нужно обновлять его вручную.