【发布时间】:2016-06-11 06:24:38
【问题描述】:
使用非常简单的模型:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
}
这是完整的架构:
<?php
use App\Models\Lease;
use App\Models\Choice;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTableExamples extends Migration {
public function up()
{
Schema::create('example', function(Blueprint $table)
{
$table->increments('id');
$table->enum('status', [1, 2, 3])->default(1);
$table->text('abc')->nullable();
$table->text('foo')->nullable();
});
}
public function down()
{
Schema::dropIfExists('example');
}
}
为什么以下保存语句会导致使用默认值定义的字段的属性为空?
$example1 = new App\Models\Example();
$example1->foo = "BAR";
$example1->save();
var_dump($example1->attributes);
这会输出以下内容,请注意输出已跳过状态字段。另请注意,缺少字段 abc。
array (size=4)
'foo' => string 'BAR' (length=3)
'id' => int 19
如果我使用$example1->fresh() 重新加载模型,我会得到预期的输出:
array (size=4)
'foo' => string 'BAR' (length=3)
'abc' => null,
'status' => int 1,
'id' => int 19
有没有办法避免fresh 方法?在引擎盖下,fresh 是数据库的另一次旅行。
【问题讨论】:
标签: php laravel laravel-5.1