Как изменить формат даты для меток времени на пивоте в Laravel? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь глобально изменить тип даты для отметок времени (созданный_обновлен_данный_ удаленный_кат) во всем приложении с timestams на timestampsTz.В миграциях это не проблема.В отдельных моделях также, поскольку я могу перезаписать параметр $dateFormat модели.

Но у меня проблема с сводными таблицами, содержащими временные метки, поскольку они не наследуют никаких параметров от моих моделей.

Допустим, у меня есть продукты и атрибуты таблица с attribute_product между ними, содержащая такие столбцы, как value и timestamps.Если я попытаюсь извлечь все атрибуты со значениями и временными метками продукта, я сделаю что-то вроде этого: $product->attributes, но получу ошибку:

local.ERROR: Trailing data {"exception":"[object] (InvalidArgumentException(code: 0): Trailing data at \\vendor\\esbot\\carbon\\src\\Carbon\\Carbon.php:910)
[stacktrace]
#0 \\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Concerns\\HasAttributes.php(716): Carbon\\Carbon::createFromFormat('Y-m-d H:i:s', '2019-06-25 16:1...')
#1 \\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Concerns\\HasAttributes.php(739): Illuminate\\Database\\Eloquent\\Model->asDateTime('2019-06-25 16:1...')
#2 \\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Concerns\\HasAttributes.php(532): Illuminate\\Database\\Eloquent\\Model->fromDateTime('2019-06-25 16:1...')
#3 \\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Model.php(230): Illuminate\\Database\\Eloquent\\Model->setAttribute('created_at', '2019-06-25 16:1...')
#4 \\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Model.php(248): Illuminate\\Database\\Eloquent\\Model->fill(Array)
...

Строитель извлекает метку времени в правильном формате (например,«2019-06-25 16: 17: 01 + 02»), но при попытке гидратации сводных данных связанных моделей используется неверный формат «Ymd H: i: s» и происходит сбой.

IsЕсть ли правильный способ добиться этого?Или есть какое-то полезное решение?

Любая помощь приветствуется?Заранее спасибо!

1 Ответ

0 голосов
/ 25 июня 2019

Вы пытались создать промежуточную модель для своих сводных таблиц?После этого вы сможете изменить свойство dateFormat.

Например, вы можете создать сводную модель, например, так:

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUser extends Pivot
{

}

и обновите взаимосвязь для другой модели, чтобы использоватьэта модель Pivot.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany('App\User')->using('App\RoleUser');
    }
}

Тогда, поскольку у вас есть класс для модели Pivot, вы сможете указать формат.

https://laravel.com/docs/5.8/eloquent-relationships#defining-custom-intermediate-table-models

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...