|
3 | 3 | namespace Composite\DB;
|
4 | 4 |
|
5 | 5 | use Composite\DB\MultiQuery\MultiInsert;
|
| 6 | +use Composite\DB\MultiQuery\MultiSelect; |
6 | 7 | use Composite\Entity\Helpers\DateTimeHelper;
|
7 | 8 | use Composite\Entity\AbstractEntity;
|
8 | 9 | use Composite\DB\Exceptions\DbException;
|
@@ -225,52 +226,15 @@ protected function findOneInternal(array $where): ?array
|
225 | 226 | * @param array<int|string|array<string,mixed>> $pkList
|
226 | 227 | * @return array<array<string, mixed>>
|
227 | 228 | * @throws DbException
|
228 |
| - * @throws EntityException |
229 | 229 | * @throws \Doctrine\DBAL\Exception
|
230 | 230 | */
|
231 | 231 | protected function findMultiInternal(array $pkList): array
|
232 | 232 | {
|
233 | 233 | if (!$pkList) {
|
234 | 234 | return [];
|
235 | 235 | }
|
236 |
| - /** @var class-string<AbstractEntity> $class */ |
237 |
| - $class = $this->config->entityClass; |
238 |
| - |
239 |
| - $pkColumns = []; |
240 |
| - foreach ($this->config->primaryKeys as $primaryKeyName) { |
241 |
| - $pkColumns[$primaryKeyName] = $class::schema()->getColumn($primaryKeyName); |
242 |
| - } |
243 |
| - if (count($pkColumns) === 1) { |
244 |
| - if (!array_is_list($pkList)) { |
245 |
| - throw new DbException('Input argument $pkList must be list'); |
246 |
| - } |
247 |
| - /** @var \Composite\Entity\Columns\AbstractColumn $pkColumn */ |
248 |
| - $pkColumn = reset($pkColumns); |
249 |
| - $preparedPkValues = array_map(fn ($pk) => $pkColumn->uncast($pk), $pkList); |
250 |
| - $query = $this->select(); |
251 |
| - $this->buildWhere($query, [$pkColumn->name => $preparedPkValues]); |
252 |
| - } else { |
253 |
| - $query = $this->select(); |
254 |
| - $expressions = []; |
255 |
| - foreach ($pkList as $i => $pkArray) { |
256 |
| - if (!is_array($pkArray)) { |
257 |
| - throw new DbException('For tables with composite keys, input array must consist associative arrays'); |
258 |
| - } |
259 |
| - $pkOrExpr = []; |
260 |
| - foreach ($pkArray as $pkName => $pkValue) { |
261 |
| - if (is_string($pkName) && isset($pkColumns[$pkName])) { |
262 |
| - $preparedPkValue = $pkColumns[$pkName]->cast($pkValue); |
263 |
| - $pkOrExpr[] = $query->expr()->eq($pkName, ':' . $pkName . $i); |
264 |
| - $query->setParameter($pkName . $i, $preparedPkValue); |
265 |
| - } |
266 |
| - } |
267 |
| - if ($pkOrExpr) { |
268 |
| - $expressions[] = $query->expr()->and(...$pkOrExpr); |
269 |
| - } |
270 |
| - } |
271 |
| - $query->where($query->expr()->or(...$expressions)); |
272 |
| - } |
273 |
| - return $query->executeQuery()->fetchAllAssociative(); |
| 236 | + $multiSelect = new MultiSelect($this->getConnection(), $this->config, $pkList); |
| 237 | + return $multiSelect->getQueryBuilder()->executeQuery()->fetchAllAssociative(); |
274 | 238 | }
|
275 | 239 |
|
276 | 240 | /**
|
@@ -395,7 +359,7 @@ protected function select(string $select = '*'): QueryBuilder
|
395 | 359 | /**
|
396 | 360 | * @param array<string, mixed> $where
|
397 | 361 | */
|
398 |
| - private function buildWhere(QueryBuilder $query, array $where): void |
| 362 | + private function buildWhere(\Doctrine\DBAL\Query\QueryBuilder $query, array $where): void |
399 | 363 | {
|
400 | 364 | foreach ($where as $column => $value) {
|
401 | 365 | if ($value === null) {
|
|
0 commit comments