我的表设置了一个时间戳字段,用于创建和更新时间字段。在我的模型中,我这样做:
protected $dates = ['created_at', 'updated_at'];
但在拨打日期时:
$p->created_at->diffForHumans()
我得到
Call to a member function diffForHumans() on string
我很肯定这应该工作。我已经用同样的很多次之前在不同的模型等,但这只是不会工作。
z2acfund1#
默认情况下,Eloquent会将created_at和updated_at列转换为Carbon的示例,Carbon提供了一系列有用的方法,并扩展了本地PHP DateTime类。请阅读:https://laravel.com/docs/5.1/eloquent-mutators#date-mutators只需检查您的composer.json文件中是否有nesbot/carbon包。如果您没有,您可以通过键入以下命令安装它
composer require nesbot/carbon
替代解决方案为:您可以使用Carbon::parse()动态创建对象。
Carbon::parse($p->created_at)->diffForHumans();
mjqavswn2#
Laravel diffForHumans()函数与我在版本5.2中使用的一样,只有在created_at和updated_at上使用时才能工作,否则会给您带来Call to a member function diffForHumans() on string错误。即使您使用了created_at和updated_at,也要确保在迁移中没有使用:
diffForHumans()
created_at
updated_at
$table->timestamp('created_at'); $table->timestamp('updated_at');
但你已经用
$table->timestamps();
根据laravel,这是有区别的,但如果出于某种原因,您希望对既不是created_at也不是updated_at的列使用diffForHumans()函数,例如expired_at,请使用Carbon
expired_at
1.首先在laravel项目文件夹中创建一个名为Addon的新文件夹 * 例如test-laravel*1.然后在该文件夹中创建一个名为Carbon.php的新文件。1.在Carbon.php文件中,输入:
Addon
Carbon.php
namespace Carbon; class Carbon extends \DateTime{ // }
然后转到您的控制器 * 例如ProductController.php *,并将Carbon名称空间添加到该文件:
ProductController.php
namespace Addon; namespace App\Http\Controllers; use Carbon\Carbon; use ... class ProductController extends Controller{ $expire_date_string = '2016-07-27 12:45:32'; // Parse date with carbon $carbonated_date = Carbon::parse($expire_date_string); // Assuming today was 2016-07-27 12:45:32 $diff_date = $carbonated_date->diffForHumans(Carbon::now()); echo $diff_date; // prints "1 month after" }
有关碳控制器的更多信息,请访问:http://carbon.nesbot.com/docs/
eqfvzcg83#
对于既不是created_at又不是updated_at的列,您不需要使用Carbon,只需将新列(如expired_at)添加到模型中即可:
/** * The attributes that should be mutated to dates. * * @var array */ protected $dates = [ 'created_at', 'updated_at', 'deleted_at', 'expired_at' ];
然后你可以使用-〉diffForHumans();https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
roejwanj4#
如果在刀片视图中:
{{ \Carbon\Carbon::parse($post->created_at)->diffForHumans() }}
xfb7svmp5#
您必须使用Carbon,如下所示:
Carbon
$date = new \Carbon($p->created_at)->diffForHumans();
i2byvkas6#
仅在“查看文件”中使用此选项:
$p->created_at->diffForHumans();
和1.确认created_at字段不能为空1.如果为空,则使用类似if (condition)的条件1.在模型文件中不需要使用protected $dates = ['created_at', 'updated_at'];
if (condition)
ki1q1bka7#
你可以不需要碳。在laravel 8,添加在控制器此行:protected $dates = [ '创建时间','更新时间',];比刀片式服务器所能使用的要多:{{ $project-〉创建时间-〉人类差异()}}
7条答案
按热度按时间z2acfund1#
默认情况下,Eloquent会将created_at和updated_at列转换为Carbon的示例,Carbon提供了一系列有用的方法,并扩展了本地PHP DateTime类。
请阅读:https://laravel.com/docs/5.1/eloquent-mutators#date-mutators
只需检查您的composer.json文件中是否有nesbot/carbon包。如果您没有,您可以通过键入以下命令安装它
替代解决方案为:
您可以使用Carbon::parse()动态创建对象。
mjqavswn2#
Laravel
diffForHumans()
函数与我在版本5.2中使用的一样,只有在created_at
和updated_at
上使用时才能工作,否则会给您带来Call to a member function diffForHumans() on string
错误。即使您使用了created_at
和updated_at
,也要确保在迁移中没有使用:但你已经用
根据laravel,这是有区别的,但如果出于某种原因,您希望对既不是
created_at
也不是updated_at
的列使用diffForHumans()
函数,例如expired_at
,请使用Carbon1.首先在laravel项目文件夹中创建一个名为
Addon
的新文件夹 * 例如test-laravel*1.然后在该文件夹中创建一个名为
Carbon.php
的新文件。1.在
Carbon.php
文件中,输入:然后转到您的控制器 * 例如
ProductController.php
*,并将Carbon名称空间添加到该文件:有关碳控制器的更多信息,请访问:http://carbon.nesbot.com/docs/
eqfvzcg83#
对于既不是created_at又不是updated_at的列,您不需要使用Carbon,只需将新列(如expired_at)添加到模型中即可:
然后你可以使用-〉diffForHumans();
https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
roejwanj4#
如果在刀片视图中:
xfb7svmp5#
您必须使用
Carbon
,如下所示:i2byvkas6#
仅在“查看文件”中使用此选项:
和
1.确认
created_at
字段不能为空1.如果为空,则使用类似
if (condition)
的条件1.在模型文件中不需要使用
protected $dates = ['created_at', 'updated_at'];
ki1q1bka7#
你可以不需要碳。在laravel 8,添加在控制器此行:
protected $dates = [ '创建时间','更新时间',];
比刀片式服务器所能使用的要多:{{ $project-〉创建时间-〉人类差异()}}