【问题标题】:Eloquent - timestamps in pivot tablesEloquent - 数据透视表中的时间戳
【发布时间】:2015-11-16 11:34:05
【问题描述】:

我有两个表之间的关系 - 多对多。

我使用sync()方法保存相关模型:

public function tags()
{
    return $this->belongsToMany('Tag')->withTimestamps();
}

通过这种方式,我可以设置时间戳字段 - created_atupdated_at,但是如何覆盖这些日期的格式。

我已经使用以下内容覆盖了模型的格式:

protected function getDateFormat()
{
    return 'U';
}

但在使用sync() 时似乎不起作用。表格中的所有记录都以默认日期格式保存。

【问题讨论】:

  • 数据透视表中的时间戳?数据透视表的全部意义在于充当 id 之间的桥梁。它们不应该包含任何列,而是 ids。但如果你真的因为某些邪恶的原因需要这样做,你可以这样处理:stackoverflow.com/questions/24441395/…
  • @dave 我只想跟踪帖子何时更改标签,这是一种方法。我在问如何在将值存储在数据库中时更改日期的格式。
  • 在花了一些时间探索Illuminate\Database\Eloquent\Relations\BelongsToMany 的内部之后,我发现时间格式是硬编码的。作为替代解决方案,您可以让 Laravel 以它的方式更新时间戳,然后从该格式创建一个时间戳。为什么不?这会做你想做的事,你会得到一个时间戳(刚刚测试过,它工作正常)。
  • @dave 这也是我发现的。我想我此时不会使用sync(),因为所有其他字段都在unix时间戳中,并且数据库很大。我们需要转换我们拥有的所有时间戳,这需要时间。在不久的将来会这样做。感谢您的帮助!

标签: php laravel-4


【解决方案1】:

使用 Carbon 来管理这些数据。按原样保存,但为模型定义 mutuator。不久 -> mutuator 是来自数据库的特定数据的获取器(在活动记录中 -> 模型类)。时间戳作为 Carbon 实例返回,因此格式非常简单。 Mutuators 在幕后进行。可以作为模型属性(加密、格式化等)的日期变化。 Laravel doc 展示如何做到这一点。

【讨论】:

    猜你喜欢
    • 2019-03-15
    • 2014-11-01
    • 2016-02-21
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2018-11-11
    • 2015-06-24
    相关资源
    最近更新 更多