雄辩的-从两个不同的模型中选择一个名称相同的列

时间:2018-09-21 04:13:33

标签: php eloquent slim

我有Student ModelUser 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原则,我的代码是否错误?如何清理我的代码?我仍在学习重构方法的灵活性,却不知道该怎么做

1 个答案:

答案 0 :(得分:1)

您不需要条件查询,只需两个查询即可。

User::where(compact('token'))->delete();
Student::where(compact('token'))->delete();

我不确定为什么要这样做。如果StudentUser相关,则应使用外键保持这种关系。

不相关的提示

  • 考虑使用$request->input('token')代替getParam()。后者仅查看查询字符串,除非有原因,否则坚持使用input()是从查询字符串或请求正文中提取请求数据的安全方法。
  • 在将$token应用于数据库查询之前,请确保对其进行验证。在执行删除操作之前,至少要检查它是否为空。
  • 了解授权。意识到这一点可能是您控制器的简化表示,因为它代表任何人都可以通过传递有效令牌来删除任何用户。