雄辩模型没有默认
问题描述:
我有一个雄辩模型和匹配迁移。我遇到了未设置默认值的问题。我正在使用MySQL。雄辩模型没有默认
迁移:
Schema::create('cert_jobs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('key')->unique();
$table->enum('task', [CertJob::TASK_CREATE, CertJob::TASK_REVOKE]);
$table->integer('user_id')->unsigned();
$table->string('input_file')->nullable();
$table->string('output_file')->nullable();
$table->enum('format', CertJob::CERT_FORMATS);
$table->integer('queue_job_id')->nullable();
$table->integer('status')->default(\App\CertJobStatus::PENDING);
$table->text('error')->nullable();
$table->integer('attempts')->default(0);
$table->boolean('downloaded')->default(false);
// created_at && updated_at
$table->timestamps();
$table->softDeletes();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
});
型号:
class CertJob extends Model
{
//...
protected $fillable = [
'task', 'input_file', 'format', 'status', 'attempts', 'key',
];
protected $visible = [
'uuid', 'task', 'owner', 'format', 'error', 'job_status',
'created_at', 'updated_at',
];
protected $appends = [
'job_status', 'uuid', 'owner'
];
public function getRouteKeyName()
{
// Auto inject by key instead of ID
return 'key';
}
public function user(){}
private function makePath(String $file){}
public function getInputFile(){}
public function getOutputFile(){}
public function getJobStatusAttribute(){}
public function getUuidAttribute(){}
public function getOwnerAttribute(){}
public function pushToQueue(){}
public static function make(string $format, User $owner, UploadedFile $certFile) : CertJob
{
// Validate
$format = strtoupper($format);
if (!in_array($format, CertJob::CERT_FORMATS)) {
$format = CertJob::CERT_FORMATS[0];
}
// Create our cert job
$certJob = new CertJob([
'key' => bin2hex(random_bytes(16)),
'task' => 'CREATE',
'format' => $format,
]);
$certJob->user()->associate($owner);
$certJob->save();
Log::info($certJob->task . ' Cert Job ' . $certJob->key . ' Created for User:' . $owner->email);
// Save input file with certJob ID in filename (easier to identify)
$inputFile = $certFile->storeAs('create', 'job_' . str_pad($certJob->id, 4, '0', STR_PAD_LEFT) . '.' . $format, CertJob::FS_DISK);
$certJob->input_file = $inputFile;
// Delete tmp
Storage::delete($certFile);
$certJob->save();
return $certJob;
}
}
当我创建一个CertJob ::使功能CertJob,得到的对象没有downloaded
,status
,或attempts
性能。
我试过打电话fresh()
零变化。为什么迁移的默认值不会传播到模型?我做错了吗?
对于它的价值,我在测试我的模型时发现了这个问题。我在测试课中唯一的魔法是use DatabaseMigrations;
。
感谢您的帮助!
答
哇我明白了。我不得不返回fresh()
的结果。
因此,在make
函数的末尾,我将return $certJob
更改为return $certJob->refresh()
,它现在可以工作。