class_uses_recursive

The class_uses_recursive function returns all traits used by a class, including traits used by all of its parent classes:
$traits class_uses_recursive(App\Models\User::class);
    public function dispatchNow($command$handler null)

    {

        
$uses class_uses_recursive($command);



        if (
in_array(InteractsWithQueue::class, $uses) &&

            
in_array(Queueable::class, $uses) &&
    {

        
parent::__construct();



        if (
in_array(CreatesMatchingTest::class, class_uses_recursive($this))) {

            
$this->addTestOptions();

        }
        $info $this->type;



        if (
in_array(CreatesMatchingTest::class, class_uses_recursive($this))) {

            if (
$this->handleTestCreation($path)) {

                
$info .= ' and test';

            }
    protected function isPrunable($model)

    {

        
$uses class_uses_recursive($model);



        return 
in_array(Prunable::class, $uses) || in_array(MassPrunable::class, $uses);

    }
        $instance = new $model;



        
$count $instance->prunable()

            ->
when(in_array(SoftDeletes::class, class_uses_recursive(get_class($instance))), function ($query) {

                
$query->withTrashed();

            })->
count();
            return $this->macroCall($method$parameters);

        }



        if (
$method === 'trashed' && in_array(SoftDeletes::class, class_uses_recursive($this->modelName()))) {

            return 
$this->state([

                
$this->newModel()->getDeletedAtColumn() => $parameters[0] ?? Carbon::now()->subDay(),

            ]);
        $total 0;



        do {

            
$total += $count in_array(SoftDeletes::class, class_uses_recursive(get_class($this)))

                        ? 
$query->forceDelete()

                        : 
$query->delete();
        static::$traitInitializers[$class] = [];



        foreach (
class_uses_recursive($class) as $trait) {

            
$method 'boot'.class_basename($trait);



            if (
method_exists($class$method) && ! in_array($method$booted)) {
        $this->load(collect($this->relations)->reject(function ($relation) {

            return 
$relation instanceof Pivot

                
|| (is_object($relation) && in_array(AsPivot::class, class_uses_recursive($relation), true));

        })->
keys()->all());



        
$this->syncOriginal();
        $total 0;



        
$this->prunable()

            ->
when(in_array(SoftDeletes::class, class_uses_recursive(get_class($this))), function ($query) {

                
$query->withTrashed();

            })->
chunkById($chunkSize, function ($models) use (&$total) {

                
$models->each->prune();
    {

        
$this->pruning();



        return 
in_array(SoftDeletes::class, class_uses_recursive(get_class($this)))

                ? 
$this->forceDelete()

                : 
$this->delete();

    }
            return $table;

        }



        if (
in_array(AsPivot::class, class_uses_recursive($model))) {

            
$this->using($table);

        }
    public function throughParentSoftDeletes()

    {

        return 
in_array(SoftDeletes::class, class_uses_recursive($this->throughParent));

    }
            $this->container->call([$this'run'], $parameters)

            : 
$this->run(...$parameters);



        
$uses array_flip(class_uses_recursive(static::class));



        if (isset(
$uses[WithoutModelEvents::class])) {

            
$callback $this->withoutModelEvents($callback);
    protected function setJobInstanceIfNecessary(Job $job$instance)

    {

        if (
in_array(InteractsWithQueue::class, class_uses_recursive($instance))) {

            
$instance->setJob($job);

        }