kit*_*sei 5 php laravel eloquent laravel-5
在创建雄辩的模型时:
Model::create(['prop1' => 1, 'prop2' => 2]);
Run Code Online (Sandbox Code Playgroud)
返回的模型只有prop1&prop2作为属性,我可以做什么来急切加载我没有插入数据库的所有其他属性,因为它们是可选的?
编辑:为什么我需要这个?重命名我的数据库字段:
数据库
CREATE TABLE `tblCustomer` (
`pkCustomerID` INT(11) NOT NULL AUTO_INCREMENT,
`baccount` VARCHAR(400) NULL DEFAULT NULL,
`fldName` VARCHAR(400) NULL DEFAULT NULL,
`fldNumRue` VARCHAR(10) NULL DEFAULT NULL,
....
PRIMARY KEY (`pkCustomerID`)
);
Run Code Online (Sandbox Code Playgroud)
客户模型
<?php namespace App\Models;
/**
* Class Customer
* @package App\Models
* @property int code
* @property string name
* @property string addressno
*/
class Customer extends Model
{
protected $table = 'tblCustomer';
protected $primaryKey = 'pkCustomerID';
public $timestamps = false;
/**
* The model's attributes.
* This is needed as all `visible fields` are mutators, so on insert
* if a field is omitted, the mutator won't find it and raise an error.
* @var array
*/
protected $attributes = [
'baccount' => null,
'fldName' => null,
'fldNumRue' => null,
];
/**
* The accessors to append to the model's array form.
* @var array
*/
protected $appends = [
'id',
'code',
'name',
'addressno'
];
public function __construct(array $attributes = [])
{
// show ONLY mutators
$this->setVisible($this->appends);
parent::__construct($attributes);
}
public function setAddressnoAttribute($value)
{
$this->attributes['fldNumRue'] = $value;
return $this;
}
public function getAddressnoAttribute()
{
return $this->attributes['fldNumRue'];
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当Laravel将所有内容转换为JSON时,他将解析我的所有mutator:
public function getAddressnoAttribute()
{
return $this->attributes['fldNumRue'];
}
Run Code Online (Sandbox Code Playgroud)
并作为引发错误$this->attributes['fldNumRue']没有定义ErrorException:未定义指数...所以我需要一种方法来初始化它们的默认值的所有属性.
您可以在模型上调用fresh()方法.它将从数据库重新加载模型并返回它.请记住,它返回一个重新加载的对象 - 它不会更新现有的对象.您还可以传递应重新加载的关系数组:
$model = $model->fresh($relations);
Run Code Online (Sandbox Code Playgroud)
您可以考虑从数据库和模型中删除默认值.这样您就不需要重新加载模型来获取默认值.
你可以通过覆盖模型中的$ attributes属性并在那里设置默认值来实现:
class MyModel extends Model {
protected $attributes = [
'key' => 'default value'
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3960 次 |
| 最近记录: |