42 lines
1.0 KiB
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;
|
|
}
|
|
} |