Я бы хотел настроить свой запрос с помощью динамических столбцов из других таблиц.
Это то, что я пробовал:
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
,Если так, как я могу это сделать? Если нет, пожалуйста, скажите мне, что я делаю неправильно.