有人可以向我解释为什么Doctrine要求存储库方法名称以findBy,findOneBy或countBy开头,为什么带有这些前缀的名称也必须以列名结尾?
在一些有用的用例中,它很有用,例如,对包含多个匹配列的记录数进行计数。
// src/Repository/FreeClassQueryRepository.php
class FreeClassQueryRepository extends ServiceEntityRepository
{
.
.
.
/**
* Returns true if one or more free class query records match the supplied
* FreeClassQuery object.
*
* @param FreeClassQuery $query
* @return bool
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function checkForDuplicate( FreeClassQuery $query )
{
$q = $this->createQueryBuilder( 'fcq' )
->select( 'COUNT(id)' )
->andWhere( 'fcq.name = :name' )
->setParameter( 'name', $query->getName())
->andWhere( 'fcq.email = :email' )
->setParameter( 'email', $query->getEmail())
->andWhere( 'fcq.street = :street' )
->setParameter( 'street', $query->getStreet())
->andWhere( 'fcq.city = :city' )
->setParameter( 'city', $query->getCity())
->andWhere( 'fcq.state = :state' )
->setParameter( 'state', $query->getState());
return $q->getQuery()->getSingleScalarResult();
}
.
.
.
}
调用此方法将导致此错误:
[错误]应用:调试 (原型制作...)失败 未定义的方法“ checkForDuplicate”。方法名称必须以findBy,findOneBy或countBy开头!
答案 0 :(得分:0)
之所以发生这种情况,是因为实体类中的@ORM \ Entity注释缺少repositoryClass =“ App \ Repository \ FreeClassQueryRepository”属性。
感谢@ficuscr链接到类似的StackOverflow问题(请参阅他的第三条评论)。