Skip to content

Commit 17d7814

Browse files
committed
Merge remote-tracking branch 'origin/2.20.x' into 3.5.x
2 parents 21e9fcb + 8fe1200 commit 17d7814

File tree

12 files changed

+401
-176
lines changed

12 files changed

+401
-176
lines changed

phpstan-baseline.neon

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2023,14 +2023,8 @@ parameters:
20232023
path: src/Persisters/Entity/BasicEntityPersister.php
20242024

20252025
-
2026-
message: '#^Access to an undefined property Doctrine\\ORM\\Mapping\\ManyToManyOwningSideMapping\|Doctrine\\ORM\\Mapping\\ManyToOneAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToOneOwningSideMapping\:\:\$relationToTargetKeyColumns\.$#'
2027-
identifier: property.notFound
2028-
count: 1
2029-
path: src/Persisters/Entity/BasicEntityPersister.php
2030-
2031-
-
2032-
message: '#^Access to an undefined property Doctrine\\ORM\\Mapping\\ManyToManyOwningSideMapping\|Doctrine\\ORM\\Mapping\\ManyToOneAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToOneOwningSideMapping\:\:\$sourceToTargetKeyColumns\.$#'
2033-
identifier: property.notFound
2026+
message: '#^Access to property \$value on an unknown class Doctrine\\ORM\\Persisters\\Entity\\BackedEnum\.$#'
2027+
identifier: class.notFound
20342028
count: 1
20352029
path: src/Persisters/Entity/BasicEntityPersister.php
20362030

@@ -2041,20 +2035,14 @@ parameters:
20412035
path: src/Persisters/Entity/BasicEntityPersister.php
20422036

20432037
-
2044-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:__construct\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
2045-
identifier: missingType.generics
2046-
count: 1
2047-
path: src/Persisters/Entity/BasicEntityPersister.php
2048-
2049-
-
2050-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:expandCriteriaParameters\(\) should return array\{list\<mixed\>, list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\>\} but returns array\{array\<mixed\>, list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\>\}\.$#'
2051-
identifier: return.type
2038+
message: '#^Class Doctrine\\ORM\\Persisters\\Entity\\BackedEnum not found\.$#'
2039+
identifier: class.notFound
20522040
count: 1
20532041
path: src/Persisters/Entity/BasicEntityPersister.php
20542042

20552043
-
2056-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:expandParameters\(\) should return array\{list\<mixed\>, list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\>\} but returns array\{array\<mixed\>, list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\>\}\.$#'
2057-
identifier: return.type
2044+
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:__construct\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
2045+
identifier: missingType.generics
20582046
count: 1
20592047
path: src/Persisters/Entity/BasicEntityPersister.php
20602048

@@ -2094,12 +2082,6 @@ parameters:
20942082
count: 1
20952083
path: src/Persisters/Entity/BasicEntityPersister.php
20962084

2097-
-
2098-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getIndividualValue\(\) should return list\<mixed\> but returns array\<mixed\>\.$#'
2099-
identifier: return.type
2100-
count: 1
2101-
path: src/Persisters/Entity/BasicEntityPersister.php
2102-
21032085
-
21042086
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getSelectColumnAssociationSQL\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
21052087
identifier: missingType.generics
@@ -2112,18 +2094,6 @@ parameters:
21122094
count: 1
21132095
path: src/Persisters/Entity/BasicEntityPersister.php
21142096

2115-
-
2116-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getTypes\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
2117-
identifier: missingType.generics
2118-
count: 1
2119-
path: src/Persisters/Entity/BasicEntityPersister.php
2120-
2121-
-
2122-
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getTypes\(\) should return list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\> but returns list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|int\>\.$#'
2123-
identifier: return.type
2124-
count: 1
2125-
path: src/Persisters/Entity/BasicEntityPersister.php
2126-
21272097
-
21282098
message: '#^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:loadCollectionFromStatement\(\) has parameter \$coll with generic class Doctrine\\ORM\\PersistentCollection but does not specify its types\: TKey, T$#'
21292099
identifier: missingType.generics
@@ -3603,6 +3573,18 @@ parameters:
36033573
count: 1
36043574
path: src/Utility/PersisterHelper.php
36053575

3576+
-
3577+
message: '#^Access to an undefined property Doctrine\\ORM\\Mapping\\ManyToManyOwningSideMapping\|Doctrine\\ORM\\Mapping\\ManyToOneAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToOneOwningSideMapping\:\:\$relationToTargetKeyColumns\.$#'
3578+
identifier: property.notFound
3579+
count: 1
3580+
path: src/Utility/PersisterHelper.php
3581+
3582+
-
3583+
message: '#^Access to an undefined property Doctrine\\ORM\\Mapping\\ManyToManyOwningSideMapping\|Doctrine\\ORM\\Mapping\\ManyToOneAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToOneOwningSideMapping\:\:\$sourceToTargetKeyColumns\.$#'
3584+
identifier: property.notFound
3585+
count: 1
3586+
path: src/Utility/PersisterHelper.php
3587+
36063588
-
36073589
message: '#^Method Doctrine\\ORM\\Utility\\PersisterHelper\:\:getTypeOfColumn\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
36083590
identifier: missingType.generics
@@ -3614,3 +3596,15 @@ parameters:
36143596
identifier: missingType.generics
36153597
count: 1
36163598
path: src/Utility/PersisterHelper.php
3599+
3600+
-
3601+
message: '#^Method Doctrine\\ORM\\Utility\\PersisterHelper\:\:inferParameterTypes\(\) has parameter \$class with generic class Doctrine\\ORM\\Mapping\\ClassMetadata but does not specify its types\: T$#'
3602+
identifier: missingType.generics
3603+
count: 1
3604+
path: src/Utility/PersisterHelper.php
3605+
3606+
-
3607+
message: '#^Method Doctrine\\ORM\\Utility\\PersisterHelper\:\:inferParameterTypes\(\) should return list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|Doctrine\\DBAL\\ParameterType\:\:ASCII\|Doctrine\\DBAL\\ParameterType\:\:BINARY\|Doctrine\\DBAL\\ParameterType\:\:BOOLEAN\|Doctrine\\DBAL\\ParameterType\:\:INTEGER\|Doctrine\\DBAL\\ParameterType\:\:LARGE_OBJECT\|Doctrine\\DBAL\\ParameterType\:\:NULL\|Doctrine\\DBAL\\ParameterType\:\:STRING\|string\> but returns list\<Doctrine\\DBAL\\ArrayParameterType\:\:ASCII\|Doctrine\\DBAL\\ArrayParameterType\:\:BINARY\|Doctrine\\DBAL\\ArrayParameterType\:\:INTEGER\|Doctrine\\DBAL\\ArrayParameterType\:\:STRING\|int\>\.$#'
3608+
identifier: return.type
3609+
count: 1
3610+
path: src/Utility/PersisterHelper.php

phpstan-dbal3.neon

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ parameters:
1111
# We can be certain that those values are not matched.
1212
-
1313
message: '~^Match expression does not handle remaining values:~'
14-
path: src/Persisters/Entity/BasicEntityPersister.php
14+
path: src/Utility/PersisterHelper.php
1515

1616
# DBAL 4 compatibility
1717
-
@@ -109,12 +109,12 @@ parameters:
109109
path: src/Mapping/Driver/AttributeDriver.php
110110

111111
-
112-
message: '~^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getArrayBindingType\(\) never returns .* so it can be removed from the return type\.$~'
113-
path: src/Persisters/Entity/BasicEntityPersister.php
112+
message: '~^Method Doctrine\\ORM\\Utility\\PersisterHelper\:\:getArrayBindingType\(\) never returns .* so it can be removed from the return type\.$~'
113+
path: src/Utility/PersisterHelper.php
114114

115115
-
116-
message: '~getTypes.*should return~'
117-
path: src/Persisters/Entity/BasicEntityPersister.php
116+
message: '~inferParameterTypes.*should return~'
117+
path: src/Utility/PersisterHelper.php
118118

119119
-
120120
message: '~.*appendLockHint.*expects.*LockMode given~'

phpstan.neon

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ parameters:
1010
# We can be certain that those values are not matched.
1111
-
1212
message: '~^Match expression does not handle remaining values:~'
13-
path: src/Persisters/Entity/BasicEntityPersister.php
13+
path: src/Utility/PersisterHelper.php
1414

1515
# DBAL 4 compatibility
1616
-
1717
message: '~^Method Doctrine\\ORM\\Query\\AST\\Functions\\TrimFunction::getTrimMode\(\) never returns .* so it can be removed from the return type\.$~'
1818
path: src/Query/AST/Functions/TrimFunction.php
1919
-
20-
message: '~^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getArrayBindingType\(\) never returns .* so it can be removed from the return type\.$~'
21-
path: src/Persisters/Entity/BasicEntityPersister.php
20+
message: '~^Method Doctrine\\ORM\\Utility\\PersisterHelper\:\:getArrayBindingType\(\) never returns .* so it can be removed from the return type\.$~'
21+
path: src/Utility/PersisterHelper.php
2222

2323
# Compatibility with DBAL 3
2424
# See https://github.com/doctrine/dbal/pull/3480

src/Persisters/Collection/ManyToManyPersister.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,16 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri
248248
if ($value === null && ($operator === Comparison::EQ || $operator === Comparison::NEQ)) {
249249
$whereClauses[] = sprintf('te.%s %s NULL', $field, $operator === Comparison::EQ ? 'IS' : 'IS NOT');
250250
} else {
251-
$whereClauses[] = sprintf('te.%s %s ?', $field, $operator);
252-
$params[] = $value;
253-
$paramTypes[] = PersisterHelper::getTypeOfField($name, $targetClass, $this->em)[0];
251+
if ($operator === Comparison::IN) {
252+
$whereClauses[] = sprintf('te.%s IN (?)', $field);
253+
} elseif ($operator === Comparison::NIN) {
254+
$whereClauses[] = sprintf('te.%s NOT IN (?)', $field);
255+
} else {
256+
$whereClauses[] = sprintf('te.%s %s ?', $field, $operator);
257+
}
258+
259+
$params = [...$params, ...PersisterHelper::convertToParameterValue($value, $this->em)];
260+
$paramTypes = [...$paramTypes, ...PersisterHelper::inferParameterTypes($name, $value, $targetClass, $this->em)];
254261
}
255262
}
256263

src/Persisters/Entity/BasicEntityPersister.php

Lines changed: 7 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace Doctrine\ORM\Persisters\Entity;
66

7-
use BackedEnum;
87
use Doctrine\Common\Collections\Criteria;
98
use Doctrine\Common\Collections\Expr\Comparison;
109
use Doctrine\Common\Collections\Order;
@@ -31,9 +30,7 @@
3130
use Doctrine\ORM\Persisters\Exception\UnrecognizedField;
3231
use Doctrine\ORM\Persisters\SqlExpressionVisitor;
3332
use Doctrine\ORM\Persisters\SqlValueVisitor;
34-
use Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;
3533
use Doctrine\ORM\Query;
36-
use Doctrine\ORM\Query\QueryException;
3734
use Doctrine\ORM\Query\ResultSetMapping;
3835
use Doctrine\ORM\Repository\Exception\InvalidFindByCall;
3936
use Doctrine\ORM\UnitOfWork;
@@ -45,15 +42,13 @@
4542
use function array_combine;
4643
use function array_keys;
4744
use function array_map;
48-
use function array_merge;
4945
use function array_search;
5046
use function array_unique;
5147
use function array_values;
5248
use function assert;
5349
use function count;
5450
use function implode;
5551
use function is_array;
56-
use function is_object;
5752
use function reset;
5853
use function spl_object_id;
5954
use function sprintf;
@@ -353,7 +348,7 @@ final protected function extractIdentifierTypes(array $id, ClassMetadata $versio
353348
$types = [];
354349

355350
foreach ($id as $field => $value) {
356-
$types = [...$types, ...$this->getTypes($field, $value, $versionedClass)];
351+
$types = [...$types, ...PersisterHelper::inferParameterTypes($field, $value, $versionedClass, $this->em)];
357352
}
358353

359354
return $types;
@@ -919,8 +914,8 @@ public function expandCriteriaParameters(Criteria $criteria): array
919914
continue;
920915
}
921916

922-
$sqlParams = [...$sqlParams, ...$this->getValues($value)];
923-
$sqlTypes = [...$sqlTypes, ...$this->getTypes($field, $value, $this->class)];
917+
$sqlParams = [...$sqlParams, ...PersisterHelper::convertToParameterValue($value, $this->em)];
918+
$sqlTypes = [...$sqlTypes, ...PersisterHelper::inferParameterTypes($field, $value, $this->class, $this->em)];
924919
}
925920

926921
return [$sqlParams, $sqlTypes];
@@ -1858,8 +1853,8 @@ public function expandParameters(array $criteria): array
18581853
continue; // skip null values.
18591854
}
18601855

1861-
$types = [...$types, ...$this->getTypes($field, $value, $this->class)];
1862-
$params = array_merge($params, $this->getValues($value));
1856+
$types = [...$types, ...PersisterHelper::inferParameterTypes($field, $value, $this->class, $this->em)];
1857+
$params = [...$params, ...PersisterHelper::convertToParameterValue($value, $this->em)];
18631858
}
18641859

18651860
return [$params, $types];
@@ -1887,130 +1882,13 @@ private function expandToManyParameters(array $criteria): array
18871882
continue; // skip null values.
18881883
}
18891884

1890-
$types = [...$types, ...$this->getTypes($criterion['field'], $criterion['value'], $criterion['class'])];
1891-
$params = array_merge($params, $this->getValues($criterion['value']));
1885+
$types = [...$types, ...PersisterHelper::inferParameterTypes($criterion['field'], $criterion['value'], $criterion['class'], $this->em)];
1886+
$params = [...$params, ...PersisterHelper::convertToParameterValue($criterion['value'], $this->em)];
18921887
}
18931888

18941889
return [$params, $types];
18951890
}
18961891

1897-
/**
1898-
* Infers field types to be used by parameter type casting.
1899-
*
1900-
* @return list<ParameterType|ArrayParameterType|int|string>
1901-
* @phpstan-return list<ParameterType::*|ArrayParameterType::*|string>
1902-
*
1903-
* @throws QueryException
1904-
*/
1905-
private function getTypes(string $field, mixed $value, ClassMetadata $class): array
1906-
{
1907-
$types = [];
1908-
1909-
switch (true) {
1910-
case isset($class->fieldMappings[$field]):
1911-
$types = array_merge($types, [$class->fieldMappings[$field]->type]);
1912-
break;
1913-
1914-
case isset($class->associationMappings[$field]):
1915-
$assoc = $this->em->getMetadataFactory()->getOwningSide($class->associationMappings[$field]);
1916-
$class = $this->em->getClassMetadata($assoc->targetEntity);
1917-
1918-
if ($assoc->isManyToManyOwningSide()) {
1919-
$columns = $assoc->relationToTargetKeyColumns;
1920-
} else {
1921-
assert($assoc->isToOneOwningSide());
1922-
$columns = $assoc->sourceToTargetKeyColumns;
1923-
}
1924-
1925-
foreach ($columns as $column) {
1926-
$types[] = PersisterHelper::getTypeOfColumn($column, $class, $this->em);
1927-
}
1928-
1929-
break;
1930-
1931-
default:
1932-
$types[] = ParameterType::STRING;
1933-
break;
1934-
}
1935-
1936-
if (is_array($value)) {
1937-
return array_map($this->getArrayBindingType(...), $types);
1938-
}
1939-
1940-
return $types;
1941-
}
1942-
1943-
/** @phpstan-return ArrayParameterType::* */
1944-
private function getArrayBindingType(ParameterType|int|string $type): ArrayParameterType|int
1945-
{
1946-
if (! $type instanceof ParameterType) {
1947-
$type = Type::getType((string) $type)->getBindingType();
1948-
}
1949-
1950-
return match ($type) {
1951-
ParameterType::STRING => ArrayParameterType::STRING,
1952-
ParameterType::INTEGER => ArrayParameterType::INTEGER,
1953-
ParameterType::ASCII => ArrayParameterType::ASCII,
1954-
ParameterType::BINARY => ArrayParameterType::BINARY,
1955-
};
1956-
}
1957-
1958-
/**
1959-
* Retrieves the parameters that identifies a value.
1960-
*
1961-
* @return mixed[]
1962-
*/
1963-
private function getValues(mixed $value): array
1964-
{
1965-
if (is_array($value)) {
1966-
$newValue = [];
1967-
1968-
foreach ($value as $itemValue) {
1969-
$newValue = array_merge($newValue, $this->getValues($itemValue));
1970-
}
1971-
1972-
return [$newValue];
1973-
}
1974-
1975-
return $this->getIndividualValue($value);
1976-
}
1977-
1978-
/**
1979-
* Retrieves an individual parameter value.
1980-
*
1981-
* @phpstan-return list<mixed>
1982-
*/
1983-
private function getIndividualValue(mixed $value): array
1984-
{
1985-
if (! is_object($value)) {
1986-
return [$value];
1987-
}
1988-
1989-
if ($value instanceof BackedEnum) {
1990-
return [$value->value];
1991-
}
1992-
1993-
$valueClass = DefaultProxyClassNameResolver::getClass($value);
1994-
1995-
if ($this->em->getMetadataFactory()->isTransient($valueClass)) {
1996-
return [$value];
1997-
}
1998-
1999-
$class = $this->em->getClassMetadata($valueClass);
2000-
2001-
if ($class->isIdentifierComposite) {
2002-
$newValue = [];
2003-
2004-
foreach ($class->getIdentifierValues($value) as $innerValue) {
2005-
$newValue = array_merge($newValue, $this->getValues($innerValue));
2006-
}
2007-
2008-
return $newValue;
2009-
}
2010-
2011-
return [$this->em->getUnitOfWork()->getSingleIdentifierValue($value)];
2012-
}
2013-
20141892
public function exists(object $entity, Criteria|null $extraConditions = null): bool
20151893
{
20161894
$criteria = $this->class->getIdentifierValues($entity);

0 commit comments

Comments
 (0)