我正在尝试使用copy()方法复制一行:
$doc = Doc::find(64618);
$newdoc = $doc->replicate();
$newdoc->Price= 9999;
$newdoc->save();
但是该表包含多个计算列,并且我收到一个错误消息,即数据字段无法更新。 使用copy()时如何排除这些字段?
答案 0 :(得分:2)
您可以传递要排除的列
$doc = Doc::find(64618);
$newdoc = $doc->replicate(['column1', 'column2']);
$newdoc->Price= 9999;
$newdoc->save();
如果您深入研究核心,这里就是您的来源。
/**
* Clone the model into a new, non-existing instance.
*
* @param array|null $except
* @return \Illuminate\Database\Eloquent\Model
*/
public function replicate(array $except = null)
{
$defaults = [
$this->getKeyName(),
$this->getCreatedAtColumn(),
$this->getUpdatedAtColumn(),
];
$except = $except ? array_unique(array_merge($except, $defaults)) : $defaults;
$attributes = Arr::except($this->attributes, $except);
$instance = new static;
$instance->setRawAttributes($attributes);
return $instance->setRelations($this->relations);
}