This makes sense. Your table for Category model has two columns, one is for the type of the model it's attached to, the other is for the id (probably something as categorisable_type (which would be something like "App\Models\Template") and categorisable_id (which would be something like "4")).

Hence everytime you re-assign already existing Category, it rewrites these two columns from the Template model to the Client model (so it changes to something like "App\Models\Client" and "6", for example).

You have several options here:

1) Your relationship type is actually not ideal. You can use simple one2many here. Create several cateogries and then have a category_id on your Template and Client model. This way you'll be able to use the same Category on both Template and Client.

2) If you need to have several categories attached to each Template or Client, use many2many relationship. The rest is similar to option 1, you'll just have two more tables, something like category_client and category_template , assuming you follow the Laravel naming convention, but you can really use anything, you just need to specify it in the relationship method.

3) You can also use many2many polymorphic relationship. You'll end up with clients , templates , categories and categorisable tables. categories table will just hold the Category, categorisable will have the relationship definition, similar to option 2.

4) If you insist on using one2many polymorphic relationships here (advice: don't), you can clone each template for every client you're assigning it to, but that makes zero sense and you actually won't have the same category attached to your Template or Client , just the clone of the original, hence you won't be able to reverse access multiple templates or client from the Category , as they both belong to different category.

Methods 1 and 2 actually reverse the entire relationship in the correct order, since your current logic is inversed and, as mentioned, not ideal.

More info here - https://laravel.com/docs/5.4/eloquent-relationships (For Laravel 5.4, which is the latest release at the time I'm writing this).