Laravel - 日期变异器

时间:2016-10-25 15:55:41

标签: laravel date mutators

尝试在Laravel中制作一个变种器,但是它没有用。

这是我的例子

public function getEventEndAttribute($date)
{

    return Carbon::parse($date)->format('d.m.Y H:i')

}

例如在我的用户模型中,我有一个完美运行的mutator:

// convert email address to lowercase
public function getEmailAttribute($value) {
    return strtolower($value);
}

因此,即使用户在视图中使用大写字母编写电子邮件,它也会转换为小写....

我希望我的日期相同......从MySQL DB格式转换为我的本地格式

这是从SO复制的,但仍然无效。 请帮忙。

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\UserRequest;
use Carbon\Carbon;
use Auth;
use DB;

class UserRequestsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //dd(DB::table('user_requests')->get());
        return view('user-requests.index', ['userRequests' => DB::table('user_requests')->get()]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('user-requests.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //dd($request->event_end);

        $this->validate($request, [
            'event_name' => 'required|max:255',
            'event_start' => 'required|date',
            'event_end' => 'required|date',
        ]);

        $userRequest = new UserRequest();
        $userRequest->user_id = Auth::user()->id;
        $userRequest->event_name = $request->event_name;
        $userRequest->event_start = $request->event_start;
        $userRequest->event_end = $request->event_end;

        $userRequest->save();

        return redirect('requests');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

当我点击我的商店方法时,我收到此错误: enter image description here

2 个答案:

答案 0 :(得分:4)

通过将日期数组添加到模型中,您实际上可以让laravel自动将日期变为Carbon对象:

protected $dates = [
    'created_at',
    'updated_at',
    'event_end'
];

然后您可以在刀片模板中对其进行格式化:

{{ $myModel->event_end->format('d.m.Y H:i') }}

或者您可以添加$dateFormat属性,以自动将此模型上的所有日期转换为您选择的格式:

 protected $dateFormat = 'd.m.Y H:i';

查看日期变更器:https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

答案 1 :(得分:0)

您可以尝试使用Carbon \ Carbon :: createFromFormat($ format,$ input)。至于parse方法,您可以使用它从字符串创建Carbon实例。