我正在尝试将整个应用程序中的时间戳的日期类型(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”,并且失败。
有没有适当的方法来实现这一目标?还是有可用的解决方法?
有什么帮助吗?预先感谢!
答案 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