【问题标题】:Doctrine findBy or statement教义 findBy 或声明
【发布时间】:2015-10-26 14:00:57
【问题描述】:

我的教义findBy 方法有问题。我知道教义怎么做

SELECT * FROM Y WHERE Z = 1 OR Z = 2 OR Z = 3

但我不知道该怎么做

SELECT * FROM Y WHERE Z = 10 OR Y = 10 OR X = 10

我必须补充一点,我不想在 querybuilder 中这样做,只能这样: findBy(array(1=> "aaa"))。有可能吗?

您好!

【问题讨论】:

  • 如果您查看 Doctrine 的 findBy 方法(并遵循它),您会看到您可以一路设置 Criteria() ......这基本上就是您想要做的。但是:不要这样做。为您的实体创建一个存储库类,并将您自己的 findBy 方法放在那里做您需要的事情。最佳实践,更快/更容易实施。
  • 你认为做 3 次 findby 并在下一步合并数组?

标签: php symfony doctrine


【解决方案1】:

您可以找到您的answer here

具体说明您的用例:

$queryBuilder = $em->getRepository('YourEntityClassName')
    ->createQueryBuilder('c');

$result = $queryBuilder->select('c')
    ->where($queryBuilder->expr()->orX(
        $queryBuilder->expr()->eq('c.x', ':value'),
        $queryBuilder->expr()->eq('c.y', ':value'),
        $queryBuilder->expr()->eq('c.z', ':value')
    ))
    ->setParameter('value', 10)
    ->getQuery()
    ->getResult();

或者简单:

$queryBuilder = $em->getRepository('YourEntityClassName')
    ->createQueryBuilder('c');

$result = $queryBuilder->select('c')
    ->where('c.x = :value or c.y = :value or c.z = :value')
    ->setParameter(':value', 10)
    ->getQuery()
    ->getResult()

$queryBuilder->expr() 在这里只是为了防止拼写错误并使您的代码更加面向未来,因为它包含在方法中。


findBy() 可以通过 Criteria 实现,但正如 @Cedar 所指出的那样,这很困难且没有很好的文档记录。

【讨论】:

  • 感谢托马斯的回答。我曾希望我只能使用 findBy 来做到这一点 :) 我的 queryBuilder 语法如下:“$this->em->getRepository('myRep')->createQueryBuilder('c')->where('c.x = : var 或 c.y = :var 或 c.z = :var ')->setParameter(':var', 100)->getQuery()->getResult();"它也有效:)
  • 是的,很不幸,但findBy() 方法仅涵盖基本用法。很高兴您找到了解决方案。
  • 谢谢托马斯,向你问好!
  • 感谢朱里!我还用您的解决方案和expr() 方法的解释更新了答案。
  • 虽然这个答案很好地解决了问题,但我应该指出,确实可以创建自定义条件对象并使用 findBy。这不值得努力,也没有太多关于这个主题的文档。所以答案的第一句话是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多