使用laravel 5.2 eloquent query& amp;获取日期并转换格式碳

时间:2016-09-21 02:36:30

标签: php laravel date laravel-5.2 php-carbon

我有控制器代码从表中获取一些行并将它们传递给视图,下面是代码提取的示例结果

enter image description here

在上面的图片中,您可以检查是否有show_date,格式是Y-m-d,现在我在视图中显示此日期,但我想将此日期格式转换为此类

 21 Sep 2016 ,Wed

我的控制器代码是

 public function show($id)
{
    $cities=General_cities::pluck('city_name','city_id');
    $showtime=Movies_showtimes::with('showdata','movie','cinema')->where([['cinema_id','=',$id],['show_date','>=',Carbon::today()],])->orderBy('show_date', 'asc')->get();

    $cinemahall=Movies_cinemahall::where('cinema_id',$id)->get();
    return view('admin.viewshowtime',compact('cities','showtime','cinemahall'));
}

我有点困惑,我怎么能批量更新eloquent对象的所有show_date,即应该在获得雄辩的对象后进行或者它应该直接在db查询中触发,或者更好地在视图中隐藏日期。

非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

$dt = Carbon::today();
echo $dt->format('j F Y \\, l'); 

答案 1 :(得分:1)

虽然有很多方法,但我认为使用Carbon viewformat()中处理是个不错的解决方案。有关进一步的格式化方法,请参阅Carbon docs

在对您的收藏进行迭代时,您可以将show_date格式化为:

$showTime->show_date->format('j M Y, D');

注意:为此,show_date必须是Carbon的实例。您可以通过在model中添加它来告诉Eloquent自动执行此操作。它看起来像这样:

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = ['created_at', 'updated_at', 'show_date'];

答案 2 :(得分:0)

这是对这个问题有用的最终答案,感谢@camelCase和@Borna找出这个答案的解决方案。

我在此解决方案中使用了Laravel 5.2访问器,请点击此处https://laravel.com/docs/5.3/eloquent-mutators#defining-an-accessor

这是我在Model中编写的访问器代码,它转换了在eloquent集合中获取的dateformat。

 public function getShowdateAttribute($value)
{
    $carbon = new Carbon($value);
    return $carbon->format('j M Y, D'); 
}