Carbon.php无法找到分离符号数据缺失

Jul*_*eto 11 php date laravel php-carbon laravel-5.2

首先,我检索所有记录,

//get inventory items
$inv = inventory::all();
Run Code Online (Sandbox Code Playgroud)

然后我循环检索记录并修改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));
}
Run Code Online (Sandbox Code Playgroud)

但它给我这个错误,

Carbon.php第425行中的InvalidArgumentException:找到意外数据.发现意外数据.找不到分隔符号数据丢失

请问任何想法,帮助,线索,建议和建议?

这是我的模特

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');
    }
}
Run Code Online (Sandbox Code Playgroud)

在刀片中,我可以使用

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

{{ date("M d, Y",strtotime($i->updated_at)) }}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

Ohg*_*why 6

我认为您正在以错误的方式进行操作。数据库中的数据不需要让人更易读,只需人类实际interacts拥有的显示即可。

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

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

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

如果出于某种原因您绝对需要使用该格式存储的日期,则需要在模型中添加一个属性,告诉它timestamp应根据特定类型对列进行格式化,例如:

protected $dateFormat = 'M d, Y';
Run Code Online (Sandbox Code Playgroud)

旁注
之所以碳涉及的是,它适用于所有所产生的列$table->timestamps(),所以created_at和updated_at列。
此外,如果您在模型中向protected $dates = []数组添加更多列,那么Carbon也将自动处理这些列。