osb/app/Traits/PushNew.php

37 lines
872 B
PHP
Raw Normal View History

2020-04-01 12:35:06 +00:00
<?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;
trait PushNew
{
public function pushNew() {
if (! $this->save()) {
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 $models) {
$models = $models instanceof Collection
? $models->all() : [$models];
foreach (array_filter($models) as $model) {
$model->setAttribute($this->getForeignKey(),$this->{$this->getKeyName()});
if (! $model->pushNew()) {
return false;
}
}
}
return true;
}
}