2017-09-03 1 views
0

Je suis en train de développer une API RESTful avec Laravel 5 et moi avons une table comme ci-dessousLaravel clé étrangère Guarded ou remplissables

Schema::create('reports', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('company_name'); 
    $table->string('direction'); 
    $table->integer('user_id')->unsigned(); 
    $table->timestamps(); 
}); 

Le champ user_id est une clé étrangère et je veux créer un nouveau Report enregistrement lorsque vous effectuez une demande POST via Android App.

Ma question est, quel devrait être le statut du champ user_id? Gardé ou remplissable?

Toute aide serait appréciée

Répondre

0

vous devriez le mettre à remplissables, parce que vous voulez définir cette valeur sur la création du modèle.

Pour plus de détails, consultez la documentation: https://laravel.com/docs/5.0/eloquent#mass-assignment

+0

Mon seul souci est, ce qui en fait remplissable pourrait causer un problème de sécurité. Qu'est ce que tu penses de ça ? – Tartar

+0

si vous faites quelque chose comme $ report = new Report (Input :: all()); alors il pourrait y avoir un problème. Dans ce cas, un attribut gardé pourrait être la bonne chose. Cela revient à la façon dont vous voulez créer et mettre à jour vos modèles. – wheeler

+0

Cet article pourrait aider à clarifier http://hndr.me/blog/laravel-mass-assignment-protection-blacklist-vs-whitelist/ – wheeler

0

Honnêtement, je vous suggère de repenser cette stratégie, cependant, voici quelque chose que vous pouvez essayer si vous avez vraiment besoin de le faire de cette façon.

N'ajoutez pas d'ID utilisateur à $fillable ou à $guarded. Mettre en place un model observer et attribuer l'id juste là.

De cette façon, vous pouvez passer l'appel en toute sécurité au modèle de rapport et être encore capable de connecter le processus de création/lecture du rapport/utilisateur