mediatekformation

PersistentCollection extends AbstractLazyCollection
in package
implements Selectable

A PersistentCollection represents a collection of elements that have persistent state.

Collections of entities represent only the associations (links) to those entities. That means, if the collection is part of a many-many mapping and you remove entities from the collection, only the links in the relation table are removed (on flush). Similarly, if you remove entities from a collection that is part of a one-many mapping this will only result in the nulling out of the foreign keys on flush.

Tags
psalm-template

TKey of array-key

psalm-template

T

template-implements

Collection<TKey,T>

Interfaces, Classes, Traits and Enums

Selectable
Interface for collections that allow efficient filtering with an expression API.

Table of Contents

$collection  : Collection<string|int, mixed>
The backed collection to use
$initialized  : bool
$association  : mixed
The association mapping the collection belongs to.
$backRefFieldName  : string
The name of the field on the target entities that points to the owner of the collection. This is only set if the association is bi-directional.
$em  : EntityManagerInterface
The EntityManager that manages the persistence of the collection.
$isDirty  : bool
Whether the collection is dirty and needs to be synchronized with the database when the UnitOfWork that manages its persistent state commits.
$owner  : object|null
The entity that owns this collection.
$snapshot  : mixed
A snapshot of the collection at the moment it was fetched from the database.
$typeClass  : ClassMetadata
The class descriptor of the collection's entity type.
__clone()  : mixed
Cleans up internal state of cloned persistent collection.
__construct()  : mixed
Creates a new persistent collection.
__sleep()  : array<string|int, string>
Called by PHP when this collection is serialized. Ensures that only the elements are properly serialized.
add()  : true
Adds an element at the end of the collection.
clear()  : void
Clears the collection, removing all elements.
contains()  : bool
Checks whether an element is contained in the collection.
containsKey()  : bool
Checks whether the collection contains an element with the specified key/index.
count()  : int
{@inheritDoc}
current()  : mixed
Gets the element of the collection at the current iterator position.
exists()  : bool
Tests for the existence of an element that satisfies the given predicate.
filter()  : Collection<string|int, mixed>
Returns all the elements of this collection that satisfy the predicate p.
first()  : mixed
Sets the internal iterator to the first element in the collection and returns this element.
forAll()  : bool
Tests whether the given predicate p holds for all elements of this collection.
get()  : mixed
Gets the element at the specified key/index.
getDeleteDiff()  : array<string|int, mixed>
INTERNAL: getDeleteDiff
getInsertDiff()  : array<string|int, mixed>
INTERNAL: getInsertDiff
getIterator()  : Traversable<int|string, mixed>
{@inheritDoc}
getKeys()  : array<string|int, int>|array<string|int, string>
Gets all keys/indices of the collection.
getMapping()  : array<string|int, mixed>|null
INTERNAL: Gets the association mapping of the collection.
getOwner()  : object|null
INTERNAL: Gets the collection owner.
getSnapshot()  : array<string|int, mixed>
INTERNAL: Returns the last snapshot of the elements in the collection.
getTypeClass()  : ClassMetadata
getValues()  : array<string|int, mixed>
Gets all values of the collection.
hydrateAdd()  : void
INTERNAL: Adds an element to a collection during hydration. This will automatically complete bidirectional associations in the case of a one-to-many association.
hydrateSet()  : void
INTERNAL: Sets a keyed element in the collection during hydration.
indexOf()  : int|string|bool
Gets the index/key of a given element. The comparison of two elements is strict, that means not only the value but also the type must match.
initialize()  : void
Initializes the collection by loading its contents from the database if the collection is not yet initialized.
isDirty()  : bool
Gets a boolean flag indicating whether this collection is dirty which means its state needs to be synchronized with the database.
isEmpty()  : bool
Checks whether the collection is empty (contains no elements).
isInitialized()  : bool
Is the lazy collection already initialized?
key()  : int|string|null
Gets the key/index of the element at the current iterator position.
last()  : mixed
Sets the internal iterator to the last element in the collection and returns this element.
map()  : Collection<string|int, mixed>
Applies the given function to each element in the collection and returns a new collection with the elements returned by the function.
matching()  : Collection<string|int, mixed>
Selects all elements from a selectable that match the expression and return a new collection containing these elements.
next()  : mixed
Moves the internal iterator position to the next element and returns this element.
offsetExists()  : bool
{@inheritDoc}
offsetGet()  : mixed
{@inheritDoc}
offsetSet()  : void
{@inheritDoc}
offsetUnset()  : object|null
{@inheritDoc}
partition()  : Collection<string|int, mixed>
Partitions this collection in two collections according to a predicate.
remove()  : object
Removes the element at the specified index from the collection.
removeElement()  : bool
Removes the specified element from the collection, if it is found.
set()  : void
Sets an element in the collection at the specified key/index.
setDirty()  : void
Sets a boolean flag, indicating whether this collection is dirty.
setInitialized()  : void
Sets the initialized flag of the collection, forcing it into that state.
setOwner()  : void
INTERNAL: Sets the collection's owning entity together with the AssociationMapping that describes the association between the owner and the elements of the collection.
slice()  : array<string|int, mixed>
Extracts a slice of $length elements starting at position $offset from the Collection.
takeSnapshot()  : void
INTERNAL: Tells this collection to take a snapshot of its current state.
toArray()  : array<string|int, mixed>
Gets a native PHP array representation of the collection.
unwrap()  : Collection<TKey, T>
Retrieves the wrapped Collection instance.
doInitialize()  : void
Do the initialization logic
changed()  : void
Marks this collection as changed/dirty.
restoreNewObjectsInDirtyCollection()  : void

Properties

$association

The association mapping the collection belongs to.

private mixed $association

This is currently either a OneToManyMapping or a ManyToManyMapping.

Tags
psalm-var

array<string, mixed>|null

$backRefFieldName

The name of the field on the target entities that points to the owner of the collection. This is only set if the association is bi-directional.

private string $backRefFieldName

$isDirty

Whether the collection is dirty and needs to be synchronized with the database when the UnitOfWork that manages its persistent state commits.

private bool $isDirty = false

$snapshot

A snapshot of the collection at the moment it was fetched from the database.

private mixed $snapshot = []

This is used to create a diff of the collection at commit time.

Tags
psalm-var

array<string|int, mixed>

Methods

__clone()

Cleans up internal state of cloned persistent collection.

public __clone() : mixed

The following problems have to be prevented:

  1. Added entities are added to old PC
  2. New collection is not dirty, if reused on other entity nothing changes.
  3. Snapshot leads to invalid diffs being generated.
  4. Lazy loading grabs entities from old owner object.
  5. New collection is connected to old owner and leads to duplicate keys.
Return values
mixed

__sleep()

Called by PHP when this collection is serialized. Ensures that only the elements are properly serialized.

public __sleep() : array<string|int, string>

Internal note: Tried to implement Serializable first but that did not work well with circular references. This solution seems simpler and works well.

Tags
psalm-return

array{0: string, 1: string}

Return values
array<string|int, string>

add()

Adds an element at the end of the collection.

public add(mixed $value) : true
Parameters
$value : mixed
Return values
true

Always TRUE.

clear()

Clears the collection, removing all elements.

public clear() : void
Return values
void

contains()

Checks whether an element is contained in the collection.

public contains(mixed $element) : bool
Parameters
$element : mixed

The element to search for.

Return values
bool

TRUE if the collection contains the element, FALSE otherwise.

containsKey()

Checks whether the collection contains an element with the specified key/index.

public containsKey(mixed $key) : bool
Parameters
$key : mixed

The key/index to check for.

Return values
bool

TRUE if the collection contains an element with the specified key/index, FALSE otherwise.

current()

Gets the element of the collection at the current iterator position.

public current() : mixed
Return values
mixed

exists()

Tests for the existence of an element that satisfies the given predicate.

public exists(Closure $p) : bool
Parameters
$p : Closure

The predicate.

Return values
bool

TRUE if the predicate is TRUE for at least one element, FALSE otherwise.

filter()

Returns all the elements of this collection that satisfy the predicate p.

public filter(Closure $p) : Collection<string|int, mixed>
Parameters
$p : Closure

The predicate used for filtering.

Return values
Collection<string|int, mixed>

A collection with the results of the filter operation.

first()

Sets the internal iterator to the first element in the collection and returns this element.

public first() : mixed
Return values
mixed

forAll()

Tests whether the given predicate p holds for all elements of this collection.

public forAll(Closure $p) : bool
Parameters
$p : Closure

The predicate.

Return values
bool

TRUE, if the predicate yields TRUE for all elements, FALSE otherwise.

get()

Gets the element at the specified key/index.

public get(mixed $key) : mixed
Parameters
$key : mixed

The key/index of the element to retrieve.

Return values
mixed

getDeleteDiff()

INTERNAL: getDeleteDiff

public getDeleteDiff() : array<string|int, mixed>
Return values
array<string|int, mixed>

getInsertDiff()

INTERNAL: getInsertDiff

public getInsertDiff() : array<string|int, mixed>
Return values
array<string|int, mixed>

getIterator()

{@inheritDoc}

public getIterator() : Traversable<int|string, mixed>
Tags
psalm-return

Traversable<TKey,T>

Return values
Traversable<int|string, mixed>

getKeys()

Gets all keys/indices of the collection.

public getKeys() : array<string|int, int>|array<string|int, string>
Return values
array<string|int, int>|array<string|int, string>

The keys/indices of the collection, in the order of the corresponding elements in the collection.

getMapping()

INTERNAL: Gets the association mapping of the collection.

public getMapping() : array<string|int, mixed>|null
Tags
psalm-return

array<string, mixed>|null

Return values
array<string|int, mixed>|null

getOwner()

INTERNAL: Gets the collection owner.

public getOwner() : object|null
Return values
object|null

getSnapshot()

INTERNAL: Returns the last snapshot of the elements in the collection.

public getSnapshot() : array<string|int, mixed>
Tags
psalm-return

array<string|int, mixed> The last snapshot of the elements.

Return values
array<string|int, mixed>

getValues()

Gets all values of the collection.

public getValues() : array<string|int, mixed>
Return values
array<string|int, mixed>

The values of all elements in the collection, in the order they appear in the collection.

hydrateAdd()

INTERNAL: Adds an element to a collection during hydration. This will automatically complete bidirectional associations in the case of a one-to-many association.

public hydrateAdd(mixed $element) : void
Parameters
$element : mixed

The element to add.

Return values
void

hydrateSet()

INTERNAL: Sets a keyed element in the collection during hydration.

public hydrateSet(mixed $key, mixed $element) : void
Parameters
$key : mixed

The key to set.

$element : mixed

The element to set.

Return values
void

indexOf()

Gets the index/key of a given element. The comparison of two elements is strict, that means not only the value but also the type must match.

public indexOf(mixed $element) : int|string|bool
Parameters
$element : mixed

The element to search for.

Return values
int|string|bool

The key/index of the element or FALSE if the element was not found.

initialize()

Initializes the collection by loading its contents from the database if the collection is not yet initialized.

public initialize() : void
Return values
void

isDirty()

Gets a boolean flag indicating whether this collection is dirty which means its state needs to be synchronized with the database.

public isDirty() : bool
Return values
bool

TRUE if the collection is dirty, FALSE otherwise.

isEmpty()

Checks whether the collection is empty (contains no elements).

public isEmpty() : bool
Return values
bool

TRUE if the collection is empty, FALSE otherwise.

isInitialized()

Is the lazy collection already initialized?

public isInitialized() : bool
Return values
bool

key()

Gets the key/index of the element at the current iterator position.

public key() : int|string|null
Return values
int|string|null

last()

Sets the internal iterator to the last element in the collection and returns this element.

public last() : mixed
Return values
mixed

map()

Applies the given function to each element in the collection and returns a new collection with the elements returned by the function.

public map(Closure $func) : Collection<string|int, mixed>
Parameters
$func : Closure
Return values
Collection<string|int, mixed>

matching()

Selects all elements from a selectable that match the expression and return a new collection containing these elements.

public matching(Criteria $criteria) : Collection<string|int, mixed>
Parameters
$criteria : Criteria
Tags
psalm-return

Collection<TKey, T>

throws
RuntimeException
Return values
Collection<string|int, mixed>

next()

Moves the internal iterator position to the next element and returns this element.

public next() : mixed
Return values
mixed

offsetExists()

{@inheritDoc}

public offsetExists(mixed $offset) : bool
Parameters
$offset : mixed
Return values
bool

offsetGet()

{@inheritDoc}

public offsetGet(mixed $offset) : mixed
Parameters
$offset : mixed
Return values
mixed

offsetSet()

{@inheritDoc}

public offsetSet(mixed $offset, mixed $value) : void
Parameters
$offset : mixed
$value : mixed
Return values
void

offsetUnset()

{@inheritDoc}

public offsetUnset(mixed $offset) : object|null
Parameters
$offset : mixed
Return values
object|null

partition()

Partitions this collection in two collections according to a predicate.

public partition(Closure $p) : Collection<string|int, mixed>
Parameters
$p : Closure

The predicate on which to partition.

Return values
Collection<string|int, mixed>

An array with two elements. The first element contains the collection of elements where the predicate returned TRUE, the second element contains the collection of elements where the predicate returned FALSE.

remove()

Removes the element at the specified index from the collection.

public remove(mixed $key) : object
Parameters
$key : mixed

The key/index of the element to remove.

Return values
object

removeElement()

Removes the specified element from the collection, if it is found.

public removeElement(mixed $element) : bool
Parameters
$element : mixed

The element to remove.

Return values
bool

TRUE if this collection contained the specified element, FALSE otherwise.

set()

Sets an element in the collection at the specified key/index.

public set(mixed $key, mixed $value) : void
Parameters
$key : mixed

The key/index of the element to set.

$value : mixed

The element to set.

Return values
void

setDirty()

Sets a boolean flag, indicating whether this collection is dirty.

public setDirty(bool $dirty) : void
Parameters
$dirty : bool

Whether the collection should be marked dirty or not.

Return values
void

setInitialized()

Sets the initialized flag of the collection, forcing it into that state.

public setInitialized(bool $bool) : void
Parameters
$bool : bool
Return values
void

setOwner()

INTERNAL: Sets the collection's owning entity together with the AssociationMapping that describes the association between the owner and the elements of the collection.

public setOwner(object $entity, array<string|int, mixed> $assoc) : void
Parameters
$entity : object
$assoc : array<string|int, mixed>
Tags
psalm-param

array<string, mixed> $assoc

Return values
void

slice()

Extracts a slice of $length elements starting at position $offset from the Collection.

public slice(int $offset[, int|null $length = null ]) : array<string|int, mixed>

If $length is null it returns all elements from $offset to the end of the Collection. Keys have to be preserved by this method. Calling this method will only return the selected slice and NOT change the elements contained in the collection slice is called on.

Parameters
$offset : int
$length : int|null = null
Tags
psalm-return

array<TKey,T>

Return values
array<string|int, mixed>

takeSnapshot()

INTERNAL: Tells this collection to take a snapshot of its current state.

public takeSnapshot() : void
Return values
void

toArray()

Gets a native PHP array representation of the collection.

public toArray() : array<string|int, mixed>
Return values
array<string|int, mixed>

doInitialize()

Do the initialization logic

protected doInitialize() : void
Return values
void

changed()

Marks this collection as changed/dirty.

private changed() : void
Return values
void

restoreNewObjectsInDirtyCollection()

private restoreNewObjectsInDirtyCollection(array<string|int, object> $newObjects) : void
Parameters
$newObjects : array<string|int, object>

Note: the only reason why this entire looping/complexity is performed via spl_object_id is because we want to prevent using array_udiff(), which is likely to cause very high overhead (complexity of O(n^2)). array_diff_key() performs the operation in core, which is faster than using a callback for comparisons

Return values
void

Search results