<?php /** * Enables a pushnew() method, similar to push() but when all relationships are new records * * Base on Model::push() */ namespace App\Traits; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Log; trait PushNew { public function pushNew() { if (! $this->save()) { // We dont traverse this models relations return false; } // To sync all of the relationships to the database, we will simply spin through // the relationships and save each model via this "pushNew" method, which allows // us to recurse into all of these nested relations for the model instance. foreach ($this->relations as $key => $models) { // If we are not pushable, jump to the next item. if ((! is_array($this->pushable)) || (! in_array($key,$this->pushable))) continue; $models = $models instanceof Collection ? $models->all() : [$models]; foreach (array_filter($models) as $model) { $model->setAttribute($this->getForeignKey(),$this->{$this->getKeyName()}); if (! $model->pushNew()) { Log::alert('Failed to save model',['attrs'=>$model->getAttributes()]); return false; } } } return true; } }