如何在Laravel中更改数据透视表时间戳的日期格式?

时间:2019-06-25 14:35:10

标签: laravel eloquent timestamp pivot php-carbon

我正在尝试将整个应用程序中的时间戳的日期类型(created_at,updated_at,deleted_at)从timestams全局更改为timestampsTz。在迁移中没有问题。无论是在单个模型中,还是因为我都可以覆盖模型的$dateFormat参数。

但是我对包含时间戳的数据透视表有问题,因为它们不继承模型中的任何参数。

假设我有一个 products attributes 表,其中的 attribute_product 数据透视表在其中包含value和{{1 }}。如果我尝试使用产品的值和时间戳来检索所有属性,则会执行以下操作:timestamps,但出现错误:

$product->attributes

构建器以正确的格式(例如“ 2019-06-25 16:17:01 + 02”)检索时间戳,但是当它试图合并相关模型的数据时,它使用了错误的格式“ Ymd H: i:s”,并且失败。

有没有适当的方法来实现这一目标?还是有可用的解决方法?

有什么帮助吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试过为数据透视表创建中介模型?然后,您应该可以更改dateFormat属性。

例如,您可以创建一个数据透视模型,如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUser extends 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