public function renameTags(string $oldName, string $newName, $class = null): int
    {
        // If no class is specified, we can do the rename with a simple SQL update
        if ($class === null) {
            return $this->tagModel::where('normalized', $this->normalize($oldName))
                ->update([
                    'name'       => $newName,
                    'normalized' => $this->normalize($newName),
                ]);
        }

        if (!($class instanceof Model)) {
            $class = new $class;
        }

        // First find the old tag
        $oldTag = $this->find($oldName);

        // If the old tag doesn't exist, we can short-circuit the process
        if (!$oldTag) {
            return 0;
        }

        // Find or create the new tag
        $newTag = $this->findOrCreate($newName);

        /** @var MorphToMany $morph */
        $morph = $class->tags();
        $pivot = $morph->newPivot();

        $relatedKeyName = $pivot->getRelatedKey();
        $relatedMorphType = $morph->getMorphType();

        return $pivot
            ->where($relatedKeyName, $oldTag->getKey())
            ->where($relatedMorphType, get_class($class))
            ->update([
                $relatedKeyName => $newTag->getKey(),
            ]);
    }
public function renameTags(string $oldName, string $newName, $class = null): int
    {
        // If no class is specified, we can do the rename with a simple SQL update
        if ($class === null) {
            return $this->tagModel::where('normalized', $this->normalize($oldName))
                ->update([
                    'name'       => $newName,
                    'normalized' => $this->normalize($newName),
                ]);
        }

        if (!($class instanceof Model)) {
            $class = new $class;
        }

        // First find the old tag
        $oldTag = $this->find($oldName);

        // If the old tag doesn't exist, we can short-circuit the process
        if (!$oldTag) {
            return 0;
        }

        // Find or create the new tag
        $newTag = $this->findOrCreate($newName);

        /** @var MorphToMany $morph */
        $morph = $class->tags();
        $pivot = $morph->newPivot();

        $relatedKeyName = $pivot->getRelatedKey();
        $relatedMorphType = $morph->getMorphType();

        return $pivot
            ->where($relatedKeyName, $oldTag->getKey())
            ->where($relatedMorphType, get_class($class))
            ->update([
                $relatedKeyName => $newTag->getKey(),
            ]);
    }
public function renameTags ( string $ oldName , string $ newName , $ class = null ) : int { // If no class is specified, we can do the rename with a simple SQL update if ( $ class === null ) { return $ this -> tagModel :: where ( 'normalized' , $ this -> normalize ( $ oldName ) ) -> update ( [ 'name' => $ newName , 'normalized' => $ this -> normalize ( $ newName ) , ] ) ; } if ( ! ( $ class instanceof Model ) ) { $ class = new $ class ; } // First find the old tag $ oldTag = $ this -> find ( $ oldName ) ; // If the old tag doesn't exist, we can short-circuit the process if ( ! $ oldTag ) { return 0 ; } // Find or create the new tag $ newTag = $ this -> findOrCreate ( $ newName ) ; /** @var MorphToMany $morph */ $ morph = $ class -> tags ( ) ; $ pivot = $ morph -> newPivot ( ) ; $ relatedKeyName = $ pivot -> getRelatedKey ( ) ; $ relatedMorphType = $ morph -> getMorphType ( ) ; return $ pivot -> where ( $ relatedKeyName , $ oldTag -> getKey ( ) ) -> where ( $ relatedMorphType , get_class ( $ class ) ) -> update ( [ $ relatedKeyName => $ newTag -> getKey ( ) , ] ) ; }
Rename tags, across all or only one model.

@param string $oldName
@param string $newName
@param \Illuminate\Database\Eloquent\Model|string|null $class

@return int
Rename tags across all or only one model .