有人可以向我解释为什么学说需要存储库方法名称才能从FindboI,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 DoctrineORMNonUniqueResultException
*/
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();
}
.
.
.
}
调用此方法会导致此错误:
[错误]应用:调试 (原型...(失败 未定义的方法" checkforduplate"。方法名称必须以FindboI,FindOneby或Countby!
开始
这是因为实体类中的@ORM entity注释缺少repositorityClass =" app repository freeclassquertory freeclassqueryrepository"属性。
感谢@ficuscr的链接,指向类似的stackoverflow问题(请参阅他的第三个评论(。