Установите DateFormat базы данных по умолчанию в ISO 8601 с часовыми поясами в Laravel
Вопрос
Я думаю, название говорит само за себя:Я хочу использовать ISO 8601 с часовыми поясами в качестве формата DateTime по умолчанию в Laravels Eloquent.Я понял это
class mEloquent extends Eloquent {
protected function getDateFormat()
{
return 'YYYY-MM-DDThh:mm:ss.sTZD';
}
}
Все мои модели будут расширяться мелоквентно.Но как мне следует создавать таблицы?Просто
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('firstName');
$table->string('lastName');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
} ......
как обычно?Как я могу сравнить этот формат даты?Или мне просто использовать значение по умолчанию и сохранить часовой пояс отдельно?
Решение
Это действительно просто, если вы будете следовать документам.
PHP date
поддержка функций ISO 8601 начиная с PHP5, и мы можем получить его, передав 'c'
форматирование символа.
http://php.net/manual/en/function.date.php
Модель Laravel преобразует атрибуты даты в Carbon
Объекты.Углерод расширяется DateTime
который обладает format
функция, поддерживающая все date
форматирование символов.
Вы можете легко создать средство доступа (или даже новый пользовательский атрибут) для изменения атрибута даты.Затем используйте Углерод format
способ изменить его на ISO 8601 формат.
Итак, в модели laravel мы можем сделать что-то вроде этого:
public function getPublishedAt8601Attribute()
{
return $this->published_at->format('c');
}
и тогда мы можем получить доступ к атрибуту следующим образом:
// Prints something like: 2016-10-13T21:48:00+03:00
echo $post->published_at_8601;
Другие советы
Как уже упоминалось в документах, добавьте это на ваш базовый класс «Meoquent»
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'c';
.
Вы также можете проверить сериализацию даты: https://laravel.com/docs/5.6/eloquent-serialization#date-Сериализация
$date = Carbon::now();
echo $date->toW3cString();
$date = $this->repository->find($id);
echo $date->created_at->toW3cString();
.
Выход
2018-04-14T18: 35: 58 + 00: 00