我正在制作一个登录表单,用户可以决定使用该用户名或电子邮件地址及其密码。因此,通常情况如下:((SQL中的(用户名或电子邮件)AND密码)。使用以下控制器代码只是不知道如何添加OR函数。
$user = $this->getDoctrine()
->getRepository('Bundle:CusUser')
->findOneBy(
array('username' => $user->getUsername(), 'email' => $user->getUsername(), 'password' => $user->getPassword())
);
两者都是使用getUsername,因为这是表格中的内容。
实际上->orBy(...)
,默认学说中没有方法EntityRepository
。
您可以在此类的API中找到所有可用的方法。
相反,请使用QueryBuilder
:
$query = $this->getDoctrine()
->getRepository('Bundle:CusUser')
->createQueryBuilder('u')
->select('u')
->where('u.username = :username')
->orWhere('u.email = :email')
->setParameter('username', $user->getUsername())
->setParameter('email', $user->getEmail())
->getQuery();
// Get the first result
$user = $query->setMaxResults(1)->getSingleResult();
将其放在自定义中EntityRepository
,并与用作where
和orWhere
语句参数的参数数组一起使用。例如:
public function findByOrBy(array $parameters)
{
$query = $this->getEntityManager()->createQueryBuilder();
// ...
foreach ($parameters as $property => $value) {
$query
->orWhere($property.' = :'.$property)
->setParameter($property, $value)
// ...
}
}
您可以在QueryBuilder
API中找到可用方法的列表(几乎所有本机SQL方法的对应关系)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句