Переименование полей created_at и updated_at в Eloquent Laravel

Ромчик
0

laravelДоброго времени суток. В одной из своих статей «Laravel: работаем с created_at и updated_at (убираем поля, переопределяем updated_at и убираем поле updated_at)» мы рассмотрели, как переопределять или вообще не учитывать поля created_at и updated_at. А в этой статье давайте рассмотрим, как можно переименовать поля created_at и updated_at.

Иногда приходиться делать проект с уже существующей базой данных. Например, переезд интернет-магазина с фреймворка Kohana на Laravel. И в таблицах вместо стандартных полей (для Laravel) created_at и updated_at есть поля created и updated. И как быть? Как указать Laravel на нестандартные поля? Все очень просто.

Давайте в тестовом проекте создадим таблицу test2:


php artisan make:migration create_test2_table --create=test2

И созданную миграцию добавим следующий код:


<?php 
    use Illuminate\Support\Facades\Schema; 
    use Illuminate\Database\Schema\Blueprint; 
    use Illuminate\Database\Migrations\Migration; 
    class CreateTest2Table extends Migration { 
        /** 
        * Run the migrations. 
        * 
        * @return void 
        */ 
        public function up() { 
            Schema::create('test2', function (Blueprint $table) { 
                $table->increments('id');
                $table->string('name');
                $table->timestamp('created') ->nullable();
                $table->timestamp('updated') ->nullable();
            });
        }

       /**
       * Reverse the migrations.
       *
       * @return void
       */
       public function down()
       {
           Schema::dropIfExists('test2');
       }
    }

И запустим миграцию:

    php artisan migrate

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

    php artisan make:controller Test2Controller --model=Test2

В контроллере у нас будут два метода getData, который получает данные и setData, который будет автоматически формировать поле name и записывать данные.


<?php 
    namespace App\Http\Controllers;
    use App\Test2; 
    use Illuminate\Http\Request;
    class Test2Controller extends Controller { 
        public function getData() { 
            $all = Test2::all();
            dd($all); 
        }
        public function setData() { 
            $name = time();
            Test2::create([
                'name' => $name,
            ]);
            return redirect()->route('getData');
        }
     }

Теперь давайте опишем нашу модель Test2:


<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class Test2 extends Model
    {
        protected $table = 'test2';
        protected $fillable = ['name'];
    }

Осталось описать роуты в файле routes/web.php:


Route::get('/get','Test2Controller@getData')->name('getData');
Route::get('/add','Test2Controller@setData')->name('setData');

И если мы попытаемся добавить данные, перейдя по ссылке http://lara.loc/add, то у нас возникнет ошибка «Unknown column ‘updated_at’ …».

Ошибка не существования полей в таблице

Правильно, потому что в нашей таблице за это поле отвечает поле с именем «created».

Переименование полей created_at и updated_at в Eloquent Laravel

Для того, чтобы показать Laravel поля для timestamps, в нашей модели необходимо переопределить две константы:


const CREATED_AT = 'created';
const UPDATED_AT = 'updated';

И если сейчас мы добавим данные, то все будет хорошо.

Вывод.

Мы с вами научились переименовывать поля created_at и updated_at

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

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