php - Carbon.php 找不到分隔符号 数据丢失

标签 php laravel date laravel-5.2 php-carbon

首先,我检索所有记录,

//get inventory items
$inv = inventory::all();

然后我循环检索到的记录并修改 created_at 和 updated_at 数据,使其更易于阅读。

foreach($inv as $i){
    $i->created_at = date("M d, Y",strtotime($i->created_at));
    $i->updated_at = date("M d, Y",strtotime($i->updated_at));
}

但是它返回了这个错误,

InvalidArgumentException in Carbon.php line 425: Unexpected data found. Unexpected data found. The separation symbol could not be found Data missing

有什么想法、帮助、线索、建议、建议吗?

这是我的模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class inventory extends Model
{
    protected $table = "inventory";
    protected $primaryKey = "item_id";
    public $incrementing = false;

    public function profile(){
        return $this->belongsTo('App\profile','username');
    }
    public function inventory_images(){
        return $this->hasMany('App\inventory_images','item_id');
    }
}

在 Blade 中,我可以使用

{{ date("M d, Y",strtotime($i->created_at)) }}

{{ date("M d, Y",strtotime($i->updated_at)) }}

它工作得很好。

最佳答案

我认为你的做法是错误的。数据库中的数据不需要更具人类可读性,只需要人类实际与之交互的显示即可。

为了解决这个问题,我们将创建一个自定义的 accessor 方法,该方法将应用于对 created_at 的所有调用。您可以为 updated_at 重新创建它。

public function getCreatedAtAttribute($timestamp) {
    return Carbon\Carbon::parse($timestamp)->format('M d, Y');
}

然后当您调用 $model->created_at 时,您的属性将以该格式返回。

如果出于某种原因您绝对需要以该格式存储日期,那么您需要向模型添加一个属性,告诉它 timestamp 列应根据特定类型进行格式化,例如作为:

protected $dateFormat = 'M d, Y';

旁注
涉及 Carbon 的原因是它应用于 $table->timestamps() 生成的所有列,因此 created_atupdated_at 列。
此外,如果您将模型中的更多列添加到 protected $dates = [] 数组,这些列也将由 Carbon 自动处理。

关于php - Carbon.php 找不到分隔符号 数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957595/

相关文章:

php - Laravel Eloquent - 如何加入表格

php - Laravel 5.3 关系问题

php - 表中显示重复记录

php - Required_if laravel 具有多个值

php - 在 echo 中格式化日期

Java 时间段(十进制年数)

php - 正则表达式从任何字符串中获取日期 yyyy-mm-dd

php - 如何按点过滤行。 PHP/MySQL

java - batik-rasterizer.jar - 将 svg 转换为 png

php - Prestashop - 我的模块的 REST 端点