Eloquent - Select 一列来自两个不同模型的同名列
Eloquent - Select one column with the same name from two different model
我有 Student Model
和 User 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();
你为什么要这样做,我不确定。如果 Student
与 User
相关,则应使用外键维护该关系。
不相关的提示:
- 考虑使用
$request->input('token')
而不是 getParam()
。后者只查看查询字符串,除非有理由,坚持使用 input()
是从查询字符串或请求正文中提取请求数据的安全方法。
- 确保在将其应用于数据库查询之前验证
$token
。在执行删除之前至少检查它是否为空。
- 了解授权。意识到这可能是您控制器的简化表示,因为任何人都可以通过传递有效令牌来删除任何用户。
我有 Student Model
和 User 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();
你为什么要这样做,我不确定。如果 Student
与 User
相关,则应使用外键维护该关系。
不相关的提示:
- 考虑使用
$request->input('token')
而不是getParam()
。后者只查看查询字符串,除非有理由,坚持使用input()
是从查询字符串或请求正文中提取请求数据的安全方法。 - 确保在将其应用于数据库查询之前验证
$token
。在执行删除之前至少检查它是否为空。 - 了解授权。意识到这可能是您控制器的简化表示,因为任何人都可以通过传递有效令牌来删除任何用户。