我试图为使用外键保存新实例找到更好的安全性。我有两个解决方案,两者都给出了相同的结果。
第一种是直接从请求输入中获取外键值。
$post= new Post();
$post->post = $request->post
$post->article_id = $request->article_id;
$post->user_id = $request->user_id;
$post->save();
第二个尝试先找到它并使用associate。
$post= new Post(['post' => $request->post]);
$post->article()->associate($request->article_id);
$post->user()->associate($request->user_id);
$post->save();
第二种方法比第一种方法长。使用第一个或第二个有什么缺点吗,比如安全性、性能等?
如果你从$request中获取user_id(我认为这是你的$_POST值?),你就有可能让人们用自己的user_id代替属于另一个玩家的id。我建议您从活动授权中获取user_id。也许是这样的?:
Auth::user->id
只有当调用者被允许为其他人发帖(例如管理函数)时,从$request中获取user_id才有意义。
除此之外,这两种方法似乎都不错。我可能更喜欢使用方法1而不是2,只是为了让它尽可能简单。