При создании красноречивых моделей:Laravel 5 свойство красноречивых моделей нагрузки после создания
Model::create(['prop1' => 1, 'prop2' => 2]);
возвращаемый модель будет только иметь prop1
& prop2
как свойства, что я могу сделать, чтобы нетерпеливые нагрузки всех других свойств, которые я гавань» t вставлены в базу данных, потому что они являются необязательными?
EDIT: Зачем мне это нужно? переименовать свои поля базы данных:
база
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`)
);
модель клиент
<?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'];
}
}
Проблема заключается в том, что, когда Laravel преобразует все в JSON, он будет разбирать все мои мутаторов:
public function getAddressnoAttribute()
{
return $this->attributes['fldNumRue'];
}
и поднять ошибку, так как $this->attributes['fldNumRue']
не определен ErrorException: Undefined index ... Так что мне нужен способ инициализировать все атрибуты с их значениями по умолчанию.
работает большим спасибо! Но разве нет автоматизированного способа получения «новой» версии вставленной модели? – kitensei
Вы можете переопределить метод create в модели (или базовой модели) с помощью этого 'return parent :: create (...) -> refresh()', но это будет полностью неэффективно. –
Вы можете сделать, как предлагает @Jan, но подумайте, действительно ли вам это нужно. Это приведет к дополнительному запросу запроса для каждой вставки. –