- Allow to convert types to floating points.
- Cross matching on an aggregate or entity property.
- Use
static
closures as much as possible to reduce the probability of creating circular references by capturing$this
as it can lead to memory root buffer exhaustion.
Formal\ORM\Adapter\SQL\ShowCreateTable::ifNotExists()
- Ability to use the comparison
in Matching
in a specification. This allows to build complex queries across different aggregates.
- SQL columns storing
Formal\ORM\Id
s now use theuuid
type. To use the Cross Aggregate Matching feature with PostgreSQL you must migrate your schema.
Formal\ORM\Specification\Has
- Updating an optional entity resulting in no property change no longer raised an exception when stored via SQL nor it generates an invalid document in Elasticsearch
Formal\ORM\Definition\Type\PointInTimeType::new()
Formal\ORM\Definition\Type\PointInTimeType::of()
as it uses a non standard string format. Use::new()
instead, but don't forget to migrate your data.
- Psalm was complaining of a missing argument when using
PointInTimeType::of()
Formal\ORM\Definition\Aggregagtes::mapName()
Formal\ORM\Adapter\Repository::removeAll()
Formal\ORM\Specification\Child\Enum
- Requires
innmind/specification:~4.0
- Requires
formal/access-layer:~4.0
Formal\ORM\Adapter\Repository\MassRemoval
, its method has been merged intoFormal\ORM\Adapter\Repository
- Ability to remove with a condition on an entity property
Formal\ORM\Adapter\Repository\MassRemoval
- You can match aggregates on optionals via
Formal\ORM\Specification\Just
Formal\ORM\Definition\Type\Support
- You can now pass a
Specification
toRepository::remove()
to remove multiple aggregates at once - When a
Set
is modified in an aggregate but the resultingSet
contains the same values the orm no longer re-persist the whole collection - The
Contains
attribute now enforce to only be used on properties
Formal\ORM\Id::for()
- Requires
innmind/immutable:~5.4
- Requires
formal/access-layer:~2.17
false
values not being persisted- Silent insert failures of entities inside collections
- Properties named
id
are now parsed correctly in entities
- You can match aggregates on collections via
Formal\ORM\Specification\Child
Formal\ORM\Adapter\Repository::any()
- You can use any enum as a property type (nullable/optional or not)
- You can use any enum inside
Set
s without having to wrap them in another class Formal\ORM\Adapter\Elasticsearch
to store aggregates in ElasticsearchFormal\ORM\Adapter\Elasticsearch\CreateIndex
Formal\ORM\Adapter\Elasticsearch\DropIndex
- Aggregates are now stored on multiple files with the
Filesystem
adapter - (Optional) Entities id column with the
SQL
adapter now use the Aggregate id as a value, the columns in the Aggregate column referencing these columns have been removed Formal\ORM\Raw\Aggregate\Collection::properties()
has been renamed::entities()
- Collection, entities and optional entities table column
id
has been renamedaggregateId
Formal\ORM\Specification\Entity
now has a similar api toChild
- Requires
innmind/filesystem:~7.4
- Support for
innmind/immutable:~5.0