【问题标题】:Laravel - Date mutatorLaravel - 日期修改器
【发布时间】:2016-10-25 15:55:41
【问题描述】:

试图在 Laravel 中为日期创建一个 mutator 但它不起作用。

这是我的例子

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)
    {
        //
    }
}

当我点击我的 store 方法时,我得到了这个错误:

【问题讨论】:

  • 你遇到了什么错误?
  • 没有错误...我只想从数据库中以本地格式制作日期。我得到这个 2016-10-27 14:51:00 而不是这个 27.10.2016 14:51
  • 如何确保我什至调用了这个 mutator

标签: laravel date mutators


【解决方案1】:

您实际上可以通过将日期数组添加到您的模型中,让 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

【讨论】:

  • 你能告诉我这个受保护的 $dateFormat = 'd.m.Y H:i';有效....在 laravel 文档中没有示例....我试图放置该属性,但日期仍然具有 DB 格式
  • 是这样的:受保护的 $dates = ['event_start', 'event_end']; protected $dateFormat = 'd.m.Y H:i';
  • 如果你 dd(); 控制器内的 event_end 字段是 Carbon 对象吗?
  • 不,它是一个字符串“27.10.2016 14:51”,例如来自 datepicker 字段
  • 正如我所怀疑的,您正在使用查询生成器来获取绕过模型的信息,如果您希望您的mutators 生效,您需要确保您使用的是eloquent:@ 987654332@;
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2015-03-01
    • 2021-02-12
    相关资源
    最近更新 更多