12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?php
-
- namespace Illuminate\Database\Eloquent\Relations\Concerns;
-
- use Illuminate\Database\Eloquent\Model;
-
- trait SupportsDefaultModels
- {
- /**
- * Indicates if a default model instance should be used.
- *
- * Alternatively, may be a Closure or array.
- *
- * @var \Closure|array|bool
- */
- protected $withDefault;
-
- /**
- * Make a new related instance for the given model.
- *
- * @param \Illuminate\Database\Eloquent\Model $parent
- * @return \Illuminate\Database\Eloquent\Model
- */
- abstract protected function newRelatedInstanceFor(Model $parent);
-
- /**
- * Return a new model instance in case the relationship does not exist.
- *
- * @param \Closure|array|bool $callback
- * @return $this
- */
- public function withDefault($callback = true)
- {
- $this->withDefault = $callback;
-
- return $this;
- }
-
- /**
- * Get the default value for this relation.
- *
- * @param \Illuminate\Database\Eloquent\Model $parent
- * @return \Illuminate\Database\Eloquent\Model|null
- */
- protected function getDefaultFor(Model $parent)
- {
- if (! $this->withDefault) {
- return;
- }
-
- $instance = $this->newRelatedInstanceFor($parent);
-
- if (is_callable($this->withDefault)) {
- return call_user_func($this->withDefault, $instance, $parent) ?: $instance;
- }
-
- if (is_array($this->withDefault)) {
- $instance->forceFill($this->withDefault);
- }
-
- return $instance;
- }
- }
|