Eloquent以年份格式添加默认值

时间:2017-05-01 19:01:07

标签: mysql eloquent laravel-5.4

如何在eloquent中使用当前年份作为默认值?

Schema::create('year', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('from')->length(4)->default(1950);
    $table->integer('to')->length(4)->default('YEAR(CURRENT_TIMESTAMP)'); // this is not working
});

甚至没有使用DB::raw('YEAR(CURRENT_TIMESTAMP)')

4 个答案:

答案 0 :(得分:1)

更清晰的解决方案是将您的列定义为:

$table->year('to')->default(new Expression('(YEAR(CURDATE()))'));

在您的应用中没有额外的逻辑。

https://laravel.com/docs/8.x/migrations#default-expressions

答案 1 :(得分:0)

我认为你不能这样做。

顺便说一下,您应该使用increments而不是increment,并且不能将4设置为integer的第二个参数。

如果使用Eloquent插入数据,则可以在创建新记录时默认填写当前年份。

答案 2 :(得分:0)

你可以使用模型事件解决这个问题。

将以下代码添加到Year模型中:

/**
 * Model Events
 */
public static function boot() {

    parent::boot();

    static::creating(function($model)
    {
        $model->to = date('Y');
    }
}

答案 3 :(得分:0)

此实施有效。

/app/Providers/AppServiceProvider.php

use App\Model\Year;
use App\Observers\YearObserver;

class AppServiceProvider extends ServiceProvider
{
     public function boot()
     {
         Year::Observe(YearObserver::class);
     }
}

/app/Observers/YearObserver.php

namespace App\Observers;
use App\Model\Year;

class YearObserver
{
    public function creating(Year $year)
    {
        if (empty($year->to) || !is_numeric($to)) {
            $year->to = date('Y');
        }
    }
}
相关问题