我们可以在 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 中使用本地作用域吗?的主要内容,如果未能解决你的问题,请参考以下文章
拒绝在框架中显示 xyz,因为它设置了 X-Frame-Options - 我可以设置允许的域吗?