php - 在同一个函数、多个过滤器中传递 3 个 where () 条件的正确方法是什么?雄辩 - laravel
问题描述
我想知道我是否做得对,我的代码是否符合语义和安全。
我需要从数据库中加载一个页面,但为此我需要交叉一些数据并且所有数据都必须兼容,验证如下:
网址:mysite.com/company/page/code
- 1 - 检查第一个参数以查看公司是否存在。
- 2 - 检查第二个参数以确定公司 X 是否有该页面
- 3 - 检查第三个参数以确定页面 Y 是否有代码以及该代码是否与您键入的内容匹配。
- 4 - 如果用户到达这里并且所有数据都正确,请加载页面和相应的数据。
在这里,他检查用户 X 是否有页面 Y,我怀疑我是否可以这样做或者是否有其他方法。
$page = Page::where('name', $name)->where('page_name', $page_name)->first();
if ($page === null) {
return view('company.pages.erros.404', compact('name', page));
}
这里和另一个类似,他检查用户 X 是否有页面 Y 以及页面 Y 的代码是否正确,和其他人一样,我怀疑在代码中放置几个 WHERE 子句是否正确
$pagecode = Page::where('name', $name)->where('page_name', $pagen_name)->where('code', $pcode)->first();
if ($pagecode === null) {
return view('company.pages.erros.invalid_code', compact('company, name', page, pcode));
}
正如我认为你会想要一般上下文中的代码,这里是完整的功能代码
public function loadpage($name, $page_name, $pcode)
{
$company = Company::where('name', $name)->first();
if ($company === null) {
return view('company.not_register', compact('name'));
}
$page = Page::where('name', $name)->where('page_name', $page_name)->first();
if ($page === null) {
return view('company.pages.erros.404', compact('name', page));
}
$pagecode = Page::where('name', $name)->where('page_name', $page_name)->where('code', $pcode)->first();
if ($pagecode === null) {
return view('company.pages.erros.invalid_code', compact('company, name', page, pcode));
}
$personality = DB::table('personalities')->where('name', $name)->first();
return view('company.pages.index', compact('company', 'name', 'personality', 'page', pcode));
}
解决方案
根据laravel 的文档,我得出以下结果:
public function loadpage($name, $page_name, $pcode)
{
$company = Company::where('name', $name)->first();
if ($company === null) {
return view('company.not_register', compact('name'));
}
$page = Page::where([ ['name', $name],
['page_name', $page_name],])->first();
if ($page === null) {
return view('company.pages.erros.404', compact('name', page));
}
$pagecode = Page::where([ ['name', $name],
['page_name', $page_name], ['code', $pcode],])->first();
if ($pagecode === null) {
return view('company.pages.erros.invalid_code', compact('company, name', page, pcode));
}
$personality = DB::table('personalities')->where('name', $name)->first();
return view('company.pages.index', compact('company', 'name', 'personality', 'page', pcode));
}
现在由比我更有经验的同事来看看这是否正确或者是否有可能改进/简化
推荐阅读
- regex - 如何匹配包含 unicode 字符的完整字符串?
- numpy - 避免将掩码数组元素格式化为“0.00”
- c++builder - 检查显示???在 Rad Studio 10.3.2 中
- vb.net - 我试图在模块页面中使用此代码,我使用按钮从 FrmEmployee 调用它以在 datagridview 中显示所有员工信息
- .net - WebBrowser - 如何单击该按钮
- ios - WebRTC [UIView renderFrame:]:发送到实例的无法识别的选择器
- angular - 如何获取嵌套文档:collection("logs") -> doc("email.com")->collection("date") ->doc("time"))
- java - 使用正则表达式验证输入至少有 2 个字母,允许特殊字符和普通字符
- .net-core - 增加标题大小 Rotativa
- javascript - Chartjs 条形图 Y 轴设置基准起始值不为 0