使用laravel更新dateTime列

L. *_*Fox 3 mysql database laravel eloquent laravel-5.6

我的数据库中有一个带有pin_date列的引脚表.

在我的迁移中我有这个:

$table->dateTime('pin_date')->nullable();

我有一个指向邮政路线的按钮

Route::post('/pins/pin-date/{id}', 'PinsController@pinDate');
Run Code Online (Sandbox Code Playgroud)

这导致了pinDate控制器方法:

public function pinDate($id)
{
    $pin = Pin::find($id);

    $pin->save();
}
Run Code Online (Sandbox Code Playgroud)

我想将数据库中的pin-date列更新为当前日期和时间,当我单击按钮并点击路径时.我不确定该怎么做.任何帮助将不胜感激!谢谢!

Ohg*_*why 6

每当模型出现时我会这样做saving,你可以绑定到boot函数model并在那里设置它:

public static function boot()
{
    parent::boot();

    static::saving(function($pin) {
        $pin->pin_date = \Carbon::now()
    });
}
Run Code Online (Sandbox Code Playgroud)

如果要更新此值而不是在保存模型时处理它(例如通过单击按钮),则可以使用Ajax.您将需要1.)路由,2.)点击处理程序,3.)AJAX请求和4.)处理请求的控制器:

使用Ajax单击处理程序:

$('.btn').on('click', function(e) {
    $.ajax({
        url: '/route/to/update/my/pin' + $(this).closest('.pin').data('id')
    });
});
Run Code Online (Sandbox Code Playgroud)

然后一条路线:

Route::post('/route/to/update/my/pin/{id}', 'PinController@updatePinDate');
Run Code Online (Sandbox Code Playgroud)

然后制作控制器方法并相应地更新它:

public function updatePinDate(Request $request, Pin $pin)
{
    $pin->pin_date = \Carbon::now();
    $pin->save();
}
Run Code Online (Sandbox Code Playgroud)

如果您不想使用javascript,您可以使用具有相同路由/控制器方法的标准表单:

<form action="/route/to/update/my/pin/{{ $pin->id }}" method="POST">
     {{csrf_field()}}

     <button type="Submit"> Update Pin Date </button>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 去掉 `\Carbon::now();` 并只使用 `now()`。 (2认同)