当前位置:  开发笔记 > 编程语言 > 正文

我们在Laravel中必须在哪里编写查询:在模型,控制器或路由中?

如何解决《我们在Laravel中必须在哪里编写查询:在模型,控制器或路由中?》经验,为你挑选了1个好方法。

我对laravel中的数据库查询感到困惑,我们在哪里编写查询:在控制器,模型或路由中?

我经历了很多教程,看到了很多不同.只是制造混乱.

请解释一下



1> Moppo..:

它取决于不同的因素,但简而言之,您可以在模型,控制器或存储库中编写它们

如果你正在编写一个控制器动作,并且你需要一个只能使用一次的查询,那么直接在控制器中编写查询(甚至在路径的闭包中)就完全没问题了.

例如,如果要获取所有类型的用户admin:

$admins = User::where('type', 'admin')->get();

现在,假设您需要在多个控制器方法中获取管理员; 您可以创建一个Repository类来包装对用户模型的访问,并在Repository中编写查询,而不是重写相同的查询:

class UserRepository
{
    public function getAllAdmins()
    {
        return User::where('type', 'admin')->get();
    }
}

现在在您的控制器中,您可以注入存储库并使用相同的存储库方法来获取管理员用户:这将使您保持代码DRY,因为您不必在控制器的操作中重复相同的查询

调节器

public function __construct(UserRepository $userRepo)
{
     $this->userRepo = $userRepo;
} 

//controller action
public function index()
{
     $admins = $this->userRepo->getAllAdmins(); 
}

最后,我们假设您需要一个查询来计算管理员用户的数量.您可以在以下位置编写此查询UserRepository:

public function getAdminNum()
{
    return User::where('type', 'admin')->count();    
}

它可以,但我们可以注意到User::where('type', 'admin')查询的片段与查询共享.getAllAdmins所以我们可以通过使用查询范围来改进它:

用户模型

public function scopeAdmins($query)
{
    return $query->where('type', 'admin');    
}

通过这种UserRepository方法,我们可以在以下方法中重写以前的查询:

public function getAllAdmins()
{
    return User::admins()->get();
} 

public function getAdminNum()
{
    return User::admins()->count();  
}

我刚刚向您展示了一个在模型中写入查询的情况

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有