Bonjour,

Je rencontre un petit problème, je suis entrain de bosser sur la partie inscription de mon site. J'enregistre un nouvel utilisateur avec son email, son mdp, je récupère aussi son rôle avec un select (affilié ou financeur) avec un champ role_id que je vais rechercher dans la table "roles", jusque là pas de soucis.
Juste après le premier select, selon ce qu'on sélectionne, un second select apparaît avec les champs correspondant à soit affilié (médecin, dentiste, ..), soit financeur (entreprise, auto-entrepreneur, ...).
J'aimerai pouvoir récupérer les champs dans la table users, pour pouvoir dire dans mon administration par exemple :

Liste des inscrits
dentiste@email.com / affilié / Dentiste

J'arrive à récuperer le rôle, mais j'ai un soucis pour le dernier select, je sais pas vraiment comment m'y prendre.
J'avais pensé à créer une table "affilie", et une table "financeur", et aller rechercher l'id de ce rôle, mais ça dépendra
de ce qu'on sélectionne, je peux pas intérargir avec l'id des deux tables vu que je peux sélectionner qu'un rôle.
Si quelqu'un a une piste pour moi, je précise que je suis encore débutant :p.

Merci d'avance.

9 réponses


Salut,

Tu dois classer les données par group, exemple, la relation entre velo, voiture et camion. La réponse est transport, alors tu fais une table transport.

Pour revenir sur ton problème, tu dois faire une table utilisateur avec :

[USER]
id
name
email
affiliation = TRUE / FALSE
fk_role_id = Une liaison sur ta table ROLE qui contient l'id du role

[ROLE]
id
name

Et pour lier tes deux tables, tu as juste à faire un :

SELECT user.email, user.affiliation, role.name as role FROM user LEFT JOIN role ON user.fk_role_id = role.id

Normalement tu auras :
email : contact@mondomaine.fr
affiliation : TRUE ou FALSE
role : dentiste

J'espère que j'ai répondu à ta question, sinon tu peux me rejoindre sur discord (Charles#8039)

Bonne journée

Bonjour Doudou,

A priori ça fonctionne, le soucis c'est que j'ai besoin de savoir différencier l'affilié du financeur, et selon ce type, leur attribuer un rôle qui leur est propre :/. (où alors j'ai mal compris ton explication)

Hey,

Si j'ai bien compris, Affilié et Financeur sont deux utilisateurs et tu veux m'être un rôle à chaqu'un ?

Si c'est ça :

[USER]
id
name
email
liaison(tu choisis ton nom après) = Tu rentres l'id du user qui est affilier à l'autre
fk_role_id

Exemple :
id: 1 name: Bernard email: bernard@gmail.com liaison: 2 fk_role_id: 1
id: 2 name: Paul email: paul@gmail.com liaison: 1 fk_role_id : 2

SELECT * FROM user u LEFT JOIN user t ON u.liaison = t.id LEFT JOIN role ON u.fk_role_id = role.id AND t.fk_role_id = role.id

En gros, tu fais une liaison sur la même table mais sur une autre ligne, donc logiquement, tu assembles deux lignes entre elles.

En fait, j'ai 3 rôles d'utilisateurs (admin, financeur, affilié), je les ai mit dans une table "roles", j'ai occulté le champ admin lors de l'inscription.

Lors de l'inscription, l'utilisateur sélectionne soit "affilié" soit "financeur" dans le premier select, ensuite un second select s'affiche en dessous du premier avec le type précis du financeur ou de l'affilié.

Affilié => Personne physique, personne morale, ...
Financeur => entreprise non cotée, mutuelle, collectivité, ...

J'aimerai enregistrer tout ça dans la table "users", en gros :

marc@email.com / affilié / personne physique
ou
jean@email.com /financeur/ entreprise non côtée

Pour ensuite créer dans mon administration une liste des inscrits, et pouvoir bien différencier les affiliés, des financeurs.

Merci à toi :)

D'accord :D

3 tables :

[USERS]
id
name
email
fk_roles_id
fk_roles_spe_id

[ROLES]
id
name

[ROLES_SPE]
id
name
fk_roles_id

Besoin de la commande SQL ?

Salut Doudou,

Je veux bien la commande SQL pour y voir un peu plus clair ^^, j'ai créé les tables pour effectuer les tests, désolé, je suis encore novice :-/.

Merci en tout cas pour ton aide !

Passe sur discord, ça sera plus simple :) ou skype
Discord : Charles#8039
Skype : boitel.charles

Re, j'ai reussi à faire le select, ça donne ça :

select users.email,roles.display_name, role_types.description 
FROM users
INNER JOIN roles
ON  role_id = roles.id
INNER JOIN role_types
ON role_type_id = role_types.id;

Y a plus qu'à créer les tables, les belongsTo, les hasOne & co avec Laravel ! :p

Merci encore

Avec plaisir