如何检查数据库中是否存在多条记录(laravel 学说)
How to check if multiple records exist on database (laravel doctrine)
我想确认数据库中是否存在一组用户。所以,假设我有一个数组:
$data = [
[
'firstName' => 'Alastair',
'lastName' => 'Appleby'
],
[
'firstName' => 'Celine',
'lastName' => 'Wilkinson'
]
];
我想 return 这两个用户,如果他们存在的话。我似乎无法找到有效地执行此操作的有效方法。我尝试了 运行 本机查询,但是 return 没有任何结果,我认为这是因为我绑定参数的方式。我的尝试:
$where = [];
$params = [];
foreach($data as $n => $u) {
$where[] = '(first_name = ? AND last_name = ?)';
$params[$n + $n + 1] = $u['firstName'];
$params[$n + $n + 2] = $u['lastName'];
}
$where = implode(' OR ', $where);
$query = "SELECT * FROM users WHERE $where";
$q = $this->em->createNativeQuery($query, new ResultSetMapping());
$q->setParameters($params);
return $q->getArrayResult();
您需要像这样使用查询生成器表达式方法;
$qb = $this->em->createQueryBuilder();
$where = [];
$params = [];
$qb->select('u')
->from(User::class, 'u');
foreach($data as $n => $u) {
$where[] = $qb->expr()->andX(
$qb->expr()->eq('u.firstName', ":firstName$n"),
$qb->expr()->eq('u.lastName', ":lastName$n")
);
$params["firstName$n"] = $u['firstName'];
$params["lastName$n"] = $u['lastName'];
}
$qb->where($qb->expr()->orX(
$where
))->setParameters($params);
return $qb->getQuery()->getArrayResult();
我想确认数据库中是否存在一组用户。所以,假设我有一个数组:
$data = [
[
'firstName' => 'Alastair',
'lastName' => 'Appleby'
],
[
'firstName' => 'Celine',
'lastName' => 'Wilkinson'
]
];
我想 return 这两个用户,如果他们存在的话。我似乎无法找到有效地执行此操作的有效方法。我尝试了 运行 本机查询,但是 return 没有任何结果,我认为这是因为我绑定参数的方式。我的尝试:
$where = [];
$params = [];
foreach($data as $n => $u) {
$where[] = '(first_name = ? AND last_name = ?)';
$params[$n + $n + 1] = $u['firstName'];
$params[$n + $n + 2] = $u['lastName'];
}
$where = implode(' OR ', $where);
$query = "SELECT * FROM users WHERE $where";
$q = $this->em->createNativeQuery($query, new ResultSetMapping());
$q->setParameters($params);
return $q->getArrayResult();
您需要像这样使用查询生成器表达式方法;
$qb = $this->em->createQueryBuilder();
$where = [];
$params = [];
$qb->select('u')
->from(User::class, 'u');
foreach($data as $n => $u) {
$where[] = $qb->expr()->andX(
$qb->expr()->eq('u.firstName', ":firstName$n"),
$qb->expr()->eq('u.lastName', ":lastName$n")
);
$params["firstName$n"] = $u['firstName'];
$params["lastName$n"] = $u['lastName'];
}
$qb->where($qb->expr()->orX(
$where
))->setParameters($params);
return $qb->getQuery()->getArrayResult();