Eloquent - Select 一列来自两个不同模型的同名列

Eloquent - Select one column with the same name from two different model

我有 Student ModelUser Model,其中有一列同名 (token)。这种情况是当我 post 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
    }
}

有没有办法从两个模型中 select 一列?基于 SOLID 原则,我的代码是否错误?如何清理我的代码?我仍在学习有关灵活性的重构方法,但不知道该怎么做

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

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

你为什么要这样做,我不确定。如果 StudentUser 相关,则应使用外键维护该关系。

不相关的提示:

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