mercredi 3 juillet 2019

Laravel Relationship - Additional fields in pivot table linking to additional models

I have simplified the problem to get to the point. I have three tables, ‘users’, ‘roles’, ‘account’.

Normally I would setup the User model to have a many to many relationship with roles but I want those roles to be specific to each account. So I have added an additional field to the pivot table. Here are the tables and fields that I have;

‘users’ table

|—————————

| id | name |

|—————————

| 1 | Bob |

| 2 | Jim |

| 3 | Fred |

|—————————

‘roles’ table

|—————————

| id | title |

|—————————

| 1 | Administrator |

| 2 | Manager |

| 3 | Approver |

|—————————

‘accounts’ table

|—————————

| id | name |

|—————————

| 1 | ABC Company |

| 2 | XYZ Shipping |

| 3 | KLM Transport |

|—————————

I then have the pivot table ‘role_user’ with an additional pivot field for the account;

|—————————

| role_id | user_id | account_id

|—————————

| 1 | 3 | 1

| 2 | 2 | 1

| 3 | 2 | 3

| 3 | 1 | 2

|—————————

I have used the “withPivot” function on the belongsToMany function when setting up the many to many relationship. This allows me to get the information using $user->roles->pivot->account_id but what I need is to be able to get the name of that company. All it’s passing to the blade template is the id from the pivot table and not linking that to an actual Account model.

Is there a way with Eloquent to get this entire model in the same way as the original relationship?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire