37 lines
872 B
PHP
37 lines
872 B
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()) {
|
||
|
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;
|
||
|
}
|
||
|
}
|