我有Student Model
和User Model
,其中一列具有相同的名称(token
)。情况是,当我从用户页面或学生页面发布token
时,我想使用单个控制器处理该请求。我尝试过的,
Class DataController
{
public function deleteData($request, $response)
{
$token = $request->getParam('token');
$user = User::where('token', $token)->first();
$student = Student::where('token', $token)->first();
if ($user) {
$user->delete();
// flash message user's data deleted
// redirect to home
}
if ($student) {
$student->delete();
// flash message student's data deleted
// redirect to home
}
// flash message error
// redirect to home
}
}
是否可以从两个模型中选择一个列?基于SOLID原则,我的代码是否错误?如何清理我的代码?我仍在学习重构方法的灵活性,却不知道该怎么做
答案 0 :(得分:1)
您不需要条件查询,只需两个查询即可。
User::where(compact('token'))->delete();
Student::where(compact('token'))->delete();
我不确定为什么要这样做。如果Student
与User
相关,则应使用外键保持这种关系。
不相关的提示
$request->input('token')
代替getParam()
。后者仅查看查询字符串,除非有原因,否则坚持使用input()
是从查询字符串或请求正文中提取请求数据的安全方法。$token
应用于数据库查询之前,请确保对其进行验证。在执行删除操作之前,至少要检查它是否为空。