Php 为什么基于默认定义的Laravel雄辩模型属性在保存后为空?
使用非常简单的模型:Php 为什么基于默认定义的Laravel雄辩模型属性在保存后为空?,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,使用非常简单的模型: <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Example extends Model { } 这将输出以下内容,请注意,输出已跳过状态字段。还要注意,字段abc丢失 array (size=4) 'foo' => string 'BAR' (length=3) 'id' => int 19 如果我重新加载模型,使用$exam
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
}
这将输出以下内容,请注意,输出已跳过状态字段。还要注意,字段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是去db的又一次旅程 雄辩的模型有getOriginal()
方法返回模型的原始属性值
刚刚测试了它,它返回所有带值的列。因此,它将是:
$example1 = new App\Models\Example();
$example1->foo = "BAR";
$example1->save();
var_dump($example1->getOriginal());
您可以尝试按照其他帖子中的建议,在您的模型中另外(或专门)设置默认值: 这在Laravel 5.1安装中适用:
class Example extends Model
{
protected $attributes = [
'status' => 1
];
}
但是,如果你认为你的DB是唯一的真实来源(并且设置默认值),那么从它得到一个新的实例可能更安全。如果您查看Eloquent的save(),您会发现它没有获取更新/插入的记录(而且,有些数据库如mysql不支持在一次调用中插入/更新时返回记录)
$example1 = new App\Models\Example();
$example1->foo = "BAR";
$example1->save();
var_dump($example1->getOriginal());
class Example extends Model
{
protected $attributes = [
'status' => 1
];
}