首页 > 解决方案 > 在同一个函数、多个过滤器中传递 3 个 where () 条件的正确方法是什么?雄辩 - laravel

问题描述

我想知道我是否做得对,我的代码是否符合语义和安全。

我需要从数据库中加载一个页面,但为此我需要交叉一些数据并且所有数据都必须兼容,验证如下:

网址:mysite.com/company/page/code

在这里,他检查用户 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));
}

标签: phpmysqllaraveleloquent

解决方案


根据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));
}

现在由比我更有经验的同事来看看这是否正确或者是否有可能改进/简化


推荐阅读