osb/app/Traits/PushNew.php

42 lines
1.0 KiB
PHP

<?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()) {
// 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) OR ! 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()) {
return false;
}
}
}
return true;
}
}