mstojanov
5 months ago

Many to Many Polymorphic Relations - Is this right?

Posted 5 months ago by mstojanov

Hello.

I'm trying to wrap my head around this, my logic below seems to work perfectly fine, but the only doubt if is this approach right, perhaps there is a better approach for such relations.

I have 6 tables.

notes
-id
-body
calls
-id
-summary
-companies
-id
-name
contacts
-id
-first_name
-last_name
model_has_companies
-company_id
-model_type
-model_id
model_has_contacts
-contact_id
-model_type
-model_id

This is how all this is supposed to work:

  1. A company can have many calls, contacts, notes
  2. Contact can be associated with many calls, notes, companies.
  3. A call can be attached to many companies and contacts at the same time.
  4. A note can be attached to many companies and contacts at the same time.

Currently, this is how I perform this logic.

  1. Company is created.

  2. Contact is created and attached to the company

model_has_contacts (contact_id, App\Company, company_id)
  1. To associate a call with a company, I create a call in calls table then attach the call to companies relationship
model_has_companies(company_id, App\Call, call_id)
  1. To associate the note with a contact and the contact company, I create a note in notes table then attach the note to contacts and companies relationship.
model_has_contacts (contact_id, App\Note, note_id)
model_has_companies (company_id, App\Note, note_id)

Note that in this example, the note is attached to the contact and to the company too.

Few questions that will help me to finalize this.

  1. Is it good to use one general table for attaching e.q. notes to contact (model_has_contacts)
  2. My doubt that this is not right, I have 2 pivot tables, model_has_contacts and model_has_companies,

A contact can have many companies and company can have many contacts, but I use only the model_has_contacts table because that's how I defined the morphedByMany relation, is this fine?

So in this case, the model_has_companies table is used to attach other data like calls and notes to the company.

Any feedback or suggestion for a better approach will be appreciated.

Regards.

Please sign in or create an account to participate in this conversation.