Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Queue;use Illuminate\Contracts\Database\ModelIdentifier;use Illuminate\Contracts\Queue\QueueableCollection;use Illuminate\Contracts\Queue\QueueableEntity;use Illuminate\Database\Eloquent\Collection as EloquentCollection;use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot;use Illuminate\Database\Eloquent\Relations\Pivot;trait SerializesAndRestoresModelIdentifiers{/*** Get the property value prepared for serialization.** @param mixed $value* @return mixed*/protected function getSerializedPropertyValue($value){if ($value instanceof QueueableCollection) {return (new ModelIdentifier($value->getQueueableClass(),$value->getQueueableIds(),$value->getQueueableRelations(),$value->getQueueableConnection()))->useCollectionClass(($collectionClass = get_class($value)) !== EloquentCollection::class? $collectionClass: null);}if ($value instanceof QueueableEntity) {return new ModelIdentifier(get_class($value),$value->getQueueableId(),$value->getQueueableRelations(),$value->getQueueableConnection());}return $value;}/*** Get the restored property value after deserialization.** @param mixed $value* @return mixed*/protected function getRestoredPropertyValue($value){if (! $value instanceof ModelIdentifier) {return $value;}return is_array($value->id)? $this->restoreCollection($value): $this->restoreModel($value);}/*** Restore a queueable collection instance.** @param \Illuminate\Contracts\Database\ModelIdentifier $value* @return \Illuminate\Database\Eloquent\Collection*/protected function restoreCollection($value){if (! $value->class || count($value->id) === 0) {return ! is_null($value->collectionClass ?? null)? new $value->collectionClass: new EloquentCollection;}$collection = $this->getQueryForModelRestoration((new $value->class)->setConnection($value->connection), $value->id)->useWritePdo()->get();if (is_a($value->class, Pivot::class, true) ||in_array(AsPivot::class, class_uses($value->class))) {return $collection;}$collection = $collection->keyBy->getKey();$collectionClass = get_class($collection);return new $collectionClass(collect($value->id)->map(function ($id) use ($collection) {return $collection[$id] ?? null;})->filter());}/*** Restore the model from the model identifier instance.** @param \Illuminate\Contracts\Database\ModelIdentifier $value* @return \Illuminate\Database\Eloquent\Model*/public function restoreModel($value){return $this->getQueryForModelRestoration((new $value->class)->setConnection($value->connection), $value->id)->useWritePdo()->firstOrFail()->load($value->relations ?? []);}/*** Get the query for model restoration.** @param \Illuminate\Database\Eloquent\Model $model* @param array|int $ids* @return \Illuminate\Database\Eloquent\Builder*/protected function getQueryForModelRestoration($model, $ids){return $model->newQueryForRestoration($ids);}}