如何在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)')
答案 0 :(得分:1)
更清晰的解决方案是将您的列定义为:
$table->year('to')->default(new Expression('(YEAR(CURDATE()))'));
在您的应用中没有额外的逻辑。
答案 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');
}
}
}