laravelplicate()方法和计算的数据库列

时间:2018-09-05 08:54:37

标签: laravel laravel-5 eloquent

我正在尝试使用copy()方法复制一行:

$doc = Doc::find(64618);
$newdoc = $doc->replicate();
$newdoc->Price= 9999; 
$newdoc->save();

但是该表包含多个计算列,并且我收到一个错误消息,即数据字段无法更新。 使用copy()时如何排除这些字段?

1 个答案:

答案 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);
    }