2017-10-20 52 views
1

J'ai une table appelée utilisateurs. Cette table a une clé étrangère appelée project_id dans une autre table appelée projets. Les utilisateurs sur ma page verront une liste déroulante qui contient tous les projets et sera en mesure de sélectionner l'un d'entre eux. Je vais ensuite utiliser la clé primaire du projet sélectionné pour être une clé étrangère à l'utilisateur nouvellement créé. Maintenant, dans le modèle éloquent de Laravel, j'ai lu que les clés étrangères doivent toujours être gardées (ne peuvent être assignées à la masse) pour des raisons de sécurité. Je ne comprends pas vraiment pourquoi. Supposons que j'ai validé que project_id existe dans la table des projets, ne devrais-je pas être sûr que la valeur est valide et peut maintenant être affectée en masse au modèle User? Y at-il une autre raison pour laquelle je manque pourquoi les gens disent que les clés étrangères doivent toujours être gardées?Avantages des clés étrangères gardées sur les modèles éloquents

Répondre

1

Les clés étrangères doivent être gardées comme une bonne pratique, mais si vous êtes absolument sûr que vous êtes en train d'assainir votre saisie, il n'y a aucune raison pour laquelle vous ne devriez pas ignorer project_id.

Il existe d'autres cas où GARDIENNAGE devrait vraiment être maintenu - par exemple, votre table d'utilisateurs a un champ is_paid_member qui indique que l'utilisateur a versé de l'argent réel pour débloquer certaines fonctionnalités sur votre site. Supposons que vous n'avez pas protégé ce champ et que l'utilisateur accède à sa page de profil, manipule le formulaire en ajoutant un champ <input type="hidden" name="is_paid_member" value="1"> et soumet le formulaire.

Si vous effectuez une mise à jour de masse lors de l'enregistrement des détails du profil - quelque chose comme $user->update($request->input()) alors l'utilisateur vient de se procurer un compte payant gratuitement.