Переименование полей created_at и updated_at в Eloquent 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