我想使用其他表中的动态列来自定义查询。
这是我尝试过的:
public function matchWithArray($select, $where, $value, array $optionalColumns, array $optionalValues) {
$query = null;
if (!empty($optionalColumns)) {
// Select
$query = $this->createQueryBuilder('p')->select($select);
// Use (multiple) inner joins, based on the arrays
for ($i = 0; $i < count($optionalColumns); $i++) {
$join = $this->helper->getTableName(array_values($optionalColumns)[$i]);
$query = $query->innerJoin("App\Entity\\$join", $join);
}
// Where
$query = $query->where('p.' . $where . ' = :where');
// Use (multiple) andWhere clauses
for ($i = 0; $i < count($optionalColumns); $i++) {
$prefix = $this->helper->getTableName(array_values($optionalColumns)[$i]);
$query = $query->andWhere("$prefix.$optionalColumns[$i] = :value$i")->setParameter("value$i", $optionalValues[$i]);
}
// Rest of the query
$query = $query
->setParameter('where', $value)
->getQuery()
->getResult()
;
}
return $query;
}
这就是我所说的:$this->matchWithArray('p.uid', 'p.city', 'Chicago', ['language'], ['english'])
现在,它只返回来自芝加哥的用户,但应该返回来自芝加哥并说英语的用户。
我的表格如下:
个人
| ID | UID | City |
|------|:---:|---------:|
| 1 | 1 | Zurich |
| 2 | 2 | Chicago |
| 3 | 3 | Chicago |
语言
| ID | UID | Language |
|------|:---:|-----------:|
| 1 | 2 | English |
| 2 | 3 | English |
| 3 | 1 | German |
我不确定,但是我认为我做错了是我与UID
不匹配。如果是这样,我该怎么做?如果没有,请告诉我我在做什么错。