Как обновить поле updated_at не обновляя данных в Laravel

Ромчик
0

Доброго времени суток. В одном из приложений на Laravel понадобилось мне изменять поле updated_at, но при этом не изменять данные. Как это сделать просто и красиво мы и рассмотрим ниже.

И так, у меня установлен Laravel. На время написания статьи версия Laravel 5.6.24

Версия Laravel

Давайте создадим таблицу в нашей базе данных items. Для этого создадим миграцию, выполнив команду в терминале


php artisan make:migration create_items_table --create=items

Создание миграции в Laravel

Миграция создана, давайте отредактируем ее и в метод up добавим следующий код:


Schema::create('items', function (Blueprint $table) {

$table->increments('id');

$table->string('text');

$table->timestamps();

});

Теперь запустим миграцию, для этого выполним в терминале следующую команду:


php artisan migrate

Внимание: перед запуском миграции у вас должно быть настроено подключение к базе данных.

Теперь давайте создадим модель Item, которая будет работать с нашей таблицей items. Выполним в терминале следующую команду:


php artisan make:model Item

Создание модели в Laravel

И добавим в нее одно свойство, которое разрешит нам массово добавлять данные в поле text:


protected $fillable = [

'text',

];

Отлично, теперь давайте создадим контроллер TestController:


php artisan make:controller TestController

Создание контроллера в Laravel

Отлично контроллер создан. Теперь давайте создадим в нем два метода: createTest – будет добавлять произвольную строку в базу данных и метод editTest – будет изменять поле updated_at при этом не изменять данные. Для этого мы будем использовать метод touch ORM Laravel.

Метод createTest:


public function createTest()

{

Item::create(['text' => str_random(100)]);

 

return 'Ok';

}

Метод editTest:


public function editTest(Request $request)

{

$items = Item::find($request->id);

$items->touch();

 

return 'Ok';

}

Отлично, теперь добавим роуты в файл routes/web.php


…

Route::get('/add','TestController@createTest');

Route::get('/edit/{id}','TestController@editTest');

…

Ок, давайте добавим несколько строк в нашу таблицу. Для этого переходим по ссылке <ваш домен>/add

И проверяем таблицу items

Таблица items

Мы добавили две записи, давайте теперь обновим поле updated_at при этом не изменив другие данные. Для этого переходим <ваш домен>/edit/<id записи> (в моем случае http://lara.loc/edit/1)

И проверим таблицу items

Измененная таблица items

Обратите внимание на столбец text и created_at – они не изменились, а вот столбец updated_at изменился.

Заключение.

Мы с вами изменили столбец updated_at в таблице при этом не меняя данных в других столбцах. Для этого мы использовали метод touch в ORM Laravel.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

©2012-2018 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика