从查询结果中将日期转换为碳实例
Converting a date to a carbon instance from query results
我最近在我的审核队列中添加了一些功能。它不是查询一个 table 问卷,而是查询用户以便我可以获取他们的用户名。
我之前的查询只是
$questionnaire = Questionnaire::all();
然后当我在页面上访问它时,我可以像这样格式化它:
{{ $questionnaire->created_at->format('F d, Y h:ia') }}
这是我的新查询在我的控制器中的样子:
public function moderate()
{
$questionnaires = DB::table('users')
->join('questionnaire', 'users.id', '=', 'questionnaire.memberid')
->select('users.username', 'questionnaire.*')
->get();
return view('questionnaire.moderate', ['questionnaires' => $questionnaires]);
}
但是,当我现在尝试访问页面上的 created_at
日期时,出现 Call to a member function format() on a non-object
错误。我的挖掘让我相信这是因为日期没有转换为碳实例。
然而,关于 Carbon 的所有文档都是针对您刚刚提取日期的情况,而我正在努力弄清楚在获得查询结果后如何转换它,以便我仍然可以在页面上访问它。
有人可以帮忙吗?
根据 Carbon API,您可以像这样创建 Carbon 实例:
$myDate = new Carbon($questionnaire->created_at);
然后按照您想要的方式格式化:
{{ $myDate->format('F d, Y h:ia') }}
它可能不是您想要的,但它会起作用。
P.S:您的问卷模型在 $dates 属性中有 created_at 字段?我认为这就足够了,甚至可以按照您现在的方式访问数据。
即使已接受的答案解决了原始问题 "Converting a date to a carbon instance",但系统的更好解决方案是每次访问该列时都获取 Carbon 日期时间对象。为此,
1) 如果它是自定义列,请确保它列在您正在访问的模型的受保护 $dates
属性 中,如此处所述 https://laravel.com/docs/master/eloquent-mutators#date-mutators.
2) 如果它是默认的 created_at
和 updated_at
时间戳,则确保模型的 public $timestamps
属性 设置为 true。
之后,您可以在任何地方轻松检索该列作为 Carbon 日期时间对象
{{ $questionnaire->created_at->format('F d, Y h:ia') }}
并且不必在每个其他查询中将列转换为日期时间。
在您的特定情况下,Questionnaire
模型似乎设置正确,因此您能够将该列作为日期时间对象访问。所以我认为以下代码应该适用于您的情况:
$questionnaires = Questionnaire::select('users.username', 'questionnaire.*')
->join('users', 'questionnaire.memberid', '=', 'users.id')
->get();
我最近在我的审核队列中添加了一些功能。它不是查询一个 table 问卷,而是查询用户以便我可以获取他们的用户名。
我之前的查询只是
$questionnaire = Questionnaire::all();
然后当我在页面上访问它时,我可以像这样格式化它:
{{ $questionnaire->created_at->format('F d, Y h:ia') }}
这是我的新查询在我的控制器中的样子:
public function moderate()
{
$questionnaires = DB::table('users')
->join('questionnaire', 'users.id', '=', 'questionnaire.memberid')
->select('users.username', 'questionnaire.*')
->get();
return view('questionnaire.moderate', ['questionnaires' => $questionnaires]);
}
但是,当我现在尝试访问页面上的 created_at
日期时,出现 Call to a member function format() on a non-object
错误。我的挖掘让我相信这是因为日期没有转换为碳实例。
然而,关于 Carbon 的所有文档都是针对您刚刚提取日期的情况,而我正在努力弄清楚在获得查询结果后如何转换它,以便我仍然可以在页面上访问它。
有人可以帮忙吗?
根据 Carbon API,您可以像这样创建 Carbon 实例:
$myDate = new Carbon($questionnaire->created_at);
然后按照您想要的方式格式化:
{{ $myDate->format('F d, Y h:ia') }}
它可能不是您想要的,但它会起作用。
P.S:您的问卷模型在 $dates 属性中有 created_at 字段?我认为这就足够了,甚至可以按照您现在的方式访问数据。
即使已接受的答案解决了原始问题 "Converting a date to a carbon instance",但系统的更好解决方案是每次访问该列时都获取 Carbon 日期时间对象。为此,
1) 如果它是自定义列,请确保它列在您正在访问的模型的受保护 $dates
属性 中,如此处所述 https://laravel.com/docs/master/eloquent-mutators#date-mutators.
2) 如果它是默认的 created_at
和 updated_at
时间戳,则确保模型的 public $timestamps
属性 设置为 true。
之后,您可以在任何地方轻松检索该列作为 Carbon 日期时间对象
{{ $questionnaire->created_at->format('F d, Y h:ia') }}
并且不必在每个其他查询中将列转换为日期时间。
在您的特定情况下,Questionnaire
模型似乎设置正确,因此您能够将该列作为日期时间对象访问。所以我认为以下代码应该适用于您的情况:
$questionnaires = Questionnaire::select('users.username', 'questionnaire.*')
->join('users', 'questionnaire.memberid', '=', 'users.id')
->get();