我们可以在 Symfony 中使用本地作用域吗?

Posted

技术标签:

【中文标题】我们可以在 Symfony 中使用本地作用域吗?【英文标题】:Can we use Local Scopes in Symfony? 【发布时间】:2022-01-04 07:28:34 【问题描述】:

我想知道一个主题。我们可以在 Laravel 中使用本地范围,但我不知道是否适用于 Symfony。

文档:Laravel Local Scopes

好吧,我的问题是我可以在 Symfony 中使用它吗?这可能吗?

祝你有美好的一天

【问题讨论】:

这是一个 Eloquent 功能。你需要在 Symfony 中使用 Eloquent。搜索“将 Eloquent 与 Symfony 一起使用”。显然,您可以使用 Doctrine 的查询构建器做类似的事情。但那是 Doctrine,而不是 Symfony。 你可以使用wouterj/eloquent-bundle 你可以在任何项目中单独使用illuminate/database,而不需要使用所有的 Laravel 【参考方案1】:

您可以对存储库中的经典方法执行相同的操作。 我可以给你看一个例子(使用the docs的源代码):

    public function findAllGreaterThanPrice(int $price, bool $includeUnavailableProducts = false): array

    // automatically knows to select Products
    // the "p" is an alias you'll use in the rest of the query
    $qb = $this->createQueryBuilder('p')
        ->where('p.price > :price')
        ->setParameter('price', $price)
        ->orderBy('p.price', 'ASC');

    if (!$includeUnavailableProducts) 
        $qb->andWhere('p.available = TRUE');
    

    $query = $qb->getQuery();

    return $query->execute();

    // to get just one result:
    // $product = $query->setMaxResults(1)->getOneOrNullResult();

在这里,您可以返回 $qb 而不是返回“$query->execute()”,并且可以使用链式方法。 你可以这样做:

$repo->findAllActive()->findAllGreaterThan12();

这里的 $repo 将是注入到您的控制器中的存储库。

在这两种方法中,您将只有一个 where 和一个 querybuilder 的返回。

【讨论】:

感谢您的回答!

以上是关于我们可以在 Symfony 中使用本地作用域吗?的主要内容,如果未能解决你的问题,请参考以下文章

js for循环会产生作用域吗

python with语句中的变量有作用域吗?

拒绝在框架中显示 xyz,因为它设置了 X-Frame-Options - 我可以设置允许的域吗?

在 JS 中工作时,在 Typescript 项目中添加本地依赖项不起作用

你真的理解JavaScript的作用域吗

Symfony 4 部署后找不到翻译文件