blob: 306880dd5118d5c7161da25daefddec7531a1fb6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
<?php
declare(strict_types=1);
namespace Doctrine\ORM\Mapping;
use LogicException;
use function sprintf;
/** @internal */
trait ToManyAssociationMappingImplementation
{
/**
* Specification of a field on target-entity that is used to index the
* collection by. This field HAS to be either the primary key or a unique
* column. Otherwise the collection does not contain all the entities that
* are actually related.
*/
public string|null $indexBy = null;
/**
* A map of field names (of the target entity) to sorting directions
*
* @var array<string, 'asc'|'desc'>
*/
public array $orderBy = [];
/** @return array<string, 'asc'|'desc'> */
final public function orderBy(): array
{
return $this->orderBy;
}
/** @psalm-assert-if-true !null $this->indexBy */
final public function isIndexed(): bool
{
return $this->indexBy !== null;
}
final public function indexBy(): string
{
if (! $this->isIndexed()) {
throw new LogicException(sprintf(
'This mapping is not indexed. Use %s::isIndexed() to check that before calling %s.',
self::class,
__METHOD__,
));
}
return $this->indexBy;
}
/** @return list<string> */
public function __sleep(): array
{
$serialized = parent::__sleep();
if ($this->indexBy !== null) {
$serialized[] = 'indexBy';
}
if ($this->orderBy !== []) {
$serialized[] = 'orderBy';
}
return $serialized;
}
}
|