1483 lines
36 KiB
ReStructuredText
1483 lines
36 KiB
ReStructuredText
Annotations Reference
|
||
=====================
|
||
|
||
In this chapter a reference of every Doctrine 2 ODM Annotation is
|
||
given with short explanations on their context and usage.
|
||
|
||
@AlsoLoad
|
||
---------
|
||
|
||
Specify one or more MongoDB fields to use for loading data if the original field
|
||
does not exist.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="string") @AlsoLoad("name") */
|
||
public $fullName;
|
||
|
||
The ``$fullName`` property will be loaded from ``fullName`` if it exists, but
|
||
fall back to ``name`` if it does not exist. If multiple fall back fields are
|
||
specified, ODM will consider them in order until the first is found.
|
||
|
||
Additionally, `@AlsoLoad`_ may annotate a method with one or more field names.
|
||
Before normal hydration, the field(s) will be considered in order and the method
|
||
will be invoked with the first value found as its single argument.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @AlsoLoad({"name", "fullName"}) */
|
||
public function populateFirstAndLastName($name)
|
||
{
|
||
list($this->firstName, $this->lastName) = explode(' ', $name);
|
||
}
|
||
|
||
For additional information on using `@AlsoLoad`_, see
|
||
:doc:`Migrations <migrating-schemas>`.
|
||
|
||
@Bin
|
||
----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin". Converts value to
|
||
`MongoBinData`_ with ``MongoBinData::GENERIC`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Bin */
|
||
private $data;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bin".
|
||
|
||
@BinCustom
|
||
----------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin\_custom". Converts
|
||
value to `MongoBinData`_ with ``MongoBinData::CUSTOM`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @BinCustom */
|
||
private $data;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bin\_custom".
|
||
|
||
@BinFunc
|
||
--------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin\_func". Converts value to
|
||
`MongoBinData`_ with ``MongoBinData::FUNC`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @BinFunc */
|
||
private $data;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bin\_func".
|
||
|
||
@BinMD5
|
||
-------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin\_md5". Converts value to
|
||
`MongoBinData`_ with ``MongoBinData::MD5`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @BinMD5 */
|
||
private $password;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bin\_md5".
|
||
|
||
@BinUUID
|
||
--------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin\_uuid". Converts value to
|
||
`MongoBinData`_ with ``MongoBinData::UUID`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @BinUUID */
|
||
private $uuid;
|
||
|
||
.. note::
|
||
|
||
Per the `BSON specification`_, this sub-type is deprecated in favor of the
|
||
RFC 4122 UUID sub-type. Consider using `@BinUUIDRFC4122`_ instead.
|
||
|
||
@BinUUIDRFC4122
|
||
---------------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bin\_uuid\_rfc4122". Converts
|
||
value to `MongoBinData`_ with ``MongoBinData::UUID_RFC4122`` sub-type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @BinUUIDRFC4122 */
|
||
private $uuid;
|
||
|
||
.. note::
|
||
|
||
RFC 4122 UUIDs must be 16 bytes. The PHP driver will throw an exception if
|
||
the binary data's size is invalid.
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bin\_uuid\_rfc4122".
|
||
|
||
@Bool
|
||
-----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "bool". Internally it uses
|
||
exactly same logic as `@Boolean`_ annotation and "boolean" type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Bool */
|
||
private $active;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated because it uses a keyword that was reserved in
|
||
PHP 7. It will be removed in ODM 2.0. Please use the `@Field`_ annotation
|
||
with type "bool".
|
||
|
||
|
||
@Boolean
|
||
--------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "boolean".
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Boolean */
|
||
private $active;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "bool".
|
||
|
||
@ChangeTrackingPolicy
|
||
---------------------
|
||
|
||
This annotation is used to change the change tracking policy for a document:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
|
||
*/
|
||
class Person
|
||
{
|
||
// ...
|
||
}
|
||
|
||
For a list of available policies, read the section on :ref:`change tracking policies <change_tracking_policies>`.
|
||
|
||
|
||
@Collection
|
||
-----------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "collection". Stores and
|
||
retrieves the value as a numerically indexed array.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Collection */
|
||
private $tags = array();
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "collection".
|
||
|
||
@Date
|
||
-----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "date". Values of any type
|
||
(e.g. integer, string, DateTime) will be converted to `MongoDate`_ for storage
|
||
in MongoDB. The property will be a DateTime when loaded from the database.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Date */
|
||
private $createdAt;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "date".
|
||
|
||
@DefaultDiscriminatorValue
|
||
--------------------------
|
||
|
||
This annotation can be used when using `@DiscriminatorField`_. It will be used
|
||
as a fallback value if a document has no discriminator field set. This must
|
||
correspond to a value from the configured discriminator map.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @InheritanceType("SINGLE_COLLECTION")
|
||
* @DiscriminatorField("type")
|
||
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
|
||
* @DefaultDiscriminatorValue("person")
|
||
*/
|
||
class Person
|
||
{
|
||
// ...
|
||
}
|
||
|
||
@DiscriminatorField
|
||
-------------------
|
||
|
||
This annotation is required for the top-most class in a
|
||
:ref:`single collection inheritance <single_collection_inheritance>` hierarchy.
|
||
It takes a string as its only argument, which specifies the database field to
|
||
store a class name or key (if a discriminator map is used). ODM uses this field
|
||
during hydration to select the instantiation class.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @InheritanceType("SINGLE_COLLECTION")
|
||
* @DiscriminatorField("type")
|
||
*/
|
||
class SuperUser
|
||
{
|
||
// ...
|
||
}
|
||
|
||
.. note::
|
||
|
||
For backwards compatibility, the discriminator field may also be specified
|
||
via either the ``name`` or ``fieldName`` annotation attributes.
|
||
|
||
@DiscriminatorMap
|
||
-----------------
|
||
|
||
This annotation is required for the top-most class in a
|
||
:ref:`single collection inheritance <single_collection_inheritance>` hierarchy.
|
||
It takes an array as its only argument, which maps keys to class names. The
|
||
class names may be fully qualified or relative to the current namespace. When
|
||
a document is persisted to the database, its class name key will be stored in
|
||
the discriminator field instead of the |FQCN|.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @InheritanceType("SINGLE_COLLECTION")
|
||
* @DiscriminatorField("type")
|
||
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
|
||
*/
|
||
class Person
|
||
{
|
||
// ...
|
||
}
|
||
|
||
.. _annotation_distance:
|
||
|
||
@Distance
|
||
---------
|
||
|
||
This annotation can be used in combination with geospatial indexes and the
|
||
:ref:`geoNear() <geonear>` query method to populate the property with the
|
||
calculated distance value.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @Index(keys={"coordinates"="2d"})
|
||
*/
|
||
class Place
|
||
{
|
||
/** @Id */
|
||
public $id;
|
||
|
||
/** @EmbedOne(targetDocument="Coordinates") */
|
||
public $coordinates;
|
||
|
||
/** @Distance */
|
||
public $distance;
|
||
}
|
||
|
||
/** @EmbeddedDocument */
|
||
class Coordinates
|
||
{
|
||
/** @Field(type="float") */
|
||
public $latitude;
|
||
|
||
/** @Field(type="float") */
|
||
public $longitude;
|
||
}
|
||
|
||
Now you can run a `geoNear command`_ and access the computed distance. The
|
||
following example would return the distance of the city nearest the query
|
||
coordinates:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
$city = $this->dm->createQuery('City')
|
||
->geoNear(50, 60)
|
||
->limit(1)
|
||
->getQuery()
|
||
->getSingleResult();
|
||
echo $city->distance;
|
||
|
||
@Document
|
||
---------
|
||
|
||
Required annotation to mark a PHP class as a document, whose peristence will be
|
||
managed by ODM.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
db - By default, the document manager will use the MongoDB database defined
|
||
in the configuration, but this option may be used to override the database
|
||
for a particular document class.
|
||
-
|
||
collection - By default, the collection name is derived from the document's
|
||
class name, but this option may be used to override that behavior.
|
||
-
|
||
repositoryClass - Specifies a custom repository class to use.
|
||
-
|
||
indexes - Specifies an array of indexes for this document.
|
||
-
|
||
readOnly - Prevents document from being updated: it can only be inserted,
|
||
upserted or removed.
|
||
-
|
||
requireIndexes - Specifies whether or not queries for this document should
|
||
require indexes by default. This may also be specified per query.
|
||
-
|
||
writeConcern - Specifies the write concern for this document that overwrites
|
||
the default write concern specified in the configuration. It does not overwrite
|
||
a write concern given as :ref:`option <flush_options>` to the ``flush``
|
||
method when committing your documents.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document(
|
||
* db="documents",
|
||
* collection="users",
|
||
* repositoryClass="MyProject\UserRepository",
|
||
* indexes={
|
||
* @Index(keys={"username"="desc"}, options={"unique"=true})
|
||
* },
|
||
* readOnly=true,
|
||
* requireIndexes=true
|
||
* )
|
||
*/
|
||
class User
|
||
{
|
||
//...
|
||
}
|
||
|
||
.. note::
|
||
Requiring Indexes was deprecated in 1.2 and will be removed in 2.0.
|
||
|
||
@EmbedMany
|
||
----------
|
||
|
||
This annotation is similar to `@EmbedOne`_, but instead of embedding one
|
||
document, it embeds a collection of documents.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
targetDocument - A |FQCN| of the target document.
|
||
-
|
||
discriminatorField - The database field name to store the discriminator
|
||
value within the embedded document.
|
||
-
|
||
discriminatorMap - Map of discriminator values to class names.
|
||
-
|
||
defaultDiscriminatorValue - A default value for discriminatorField if no value
|
||
has been set in the embedded document.
|
||
-
|
||
strategy - The strategy used to persist changes to the collection. Possible
|
||
values are ``addToSet``, ``pushAll``, ``set``, and ``setArray``. ``pushAll``
|
||
is the default. See :ref:`storage_strategies` for more information.
|
||
-
|
||
collectionClass - A |FQCN| of class that implements ``Collection`` interface
|
||
and is used to hold documents. Doctrine's ``ArrayCollection`` is used by default.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @EmbedMany(
|
||
* strategy="set",
|
||
* discriminatorField="type",
|
||
* discriminatorMap={
|
||
* "book"="Documents\BookTag",
|
||
* "song"="Documents\SongTag"
|
||
* },
|
||
* defaultDiscriminatorValue="book"
|
||
* )
|
||
*/
|
||
private $tags = array();
|
||
|
||
Depending on the embedded document's class, a value of ``user`` or ``author``
|
||
will be stored in the ``type`` field and used to reconstruct the proper class
|
||
during hydration. The ``type`` field need not be mapped on the embedded
|
||
document classes.
|
||
|
||
@EmbedOne
|
||
---------
|
||
|
||
The `@EmbedOne`_ annotation works similarly to `@ReferenceOne`_, except that
|
||
that document will be embedded within the parent document. Consider the
|
||
following excerpt from the MongoDB documentation:
|
||
|
||
The key question in MongoDB schema design is "does this object merit its own
|
||
collection, or rather should it be embedded within objects in other
|
||
collections?" In relational databases, each sub-item of interest typically
|
||
becomes a separate table (unless you are denormalizing for performance). In
|
||
MongoDB, this is not recommended – embedding objects is much more efficient.
|
||
Data is then collocated on disk; client-server turnarounds to the database
|
||
are eliminated. So in general, the question to ask is, "why would I not want
|
||
to embed this object?"
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
targetDocument - A |FQCN| of the target document.
|
||
-
|
||
discriminatorField - The database field name to store the discriminator
|
||
value within the embedded document.
|
||
-
|
||
discriminatorMap - Map of discriminator values to class names.
|
||
-
|
||
defaultDiscriminatorValue - A default value for discriminatorField if no value
|
||
has been set in the embedded document.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @EmbedOne(
|
||
* discriminatorField="type",
|
||
* discriminatorMap={
|
||
* "user"="Documents\User",
|
||
* "author"="Documents\Author"
|
||
* },
|
||
* defaultDiscriminatorValue="user"
|
||
* )
|
||
*/
|
||
private $creator;
|
||
|
||
Depending on the embedded document's class, a value of ``user`` or ``author``
|
||
will be stored in the ``type`` field and used to reconstruct the proper class
|
||
during hydration. The ``type`` field need not be mapped on the embedded
|
||
document classes.
|
||
|
||
@EmbeddedDocument
|
||
-----------------
|
||
|
||
Marks the document as embeddable. This annotation is required for any documents
|
||
to be stored within an `@EmbedOne`_ or `@EmbedMany`_ relationship.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @EmbeddedDocument */
|
||
class Money
|
||
{
|
||
/** @Field(type="float") */
|
||
private $amount;
|
||
|
||
public function __construct($amount)
|
||
{
|
||
$this->amount = (float) $amount;
|
||
}
|
||
//...
|
||
}
|
||
|
||
/** @Document(db="finance", collection="wallets") */
|
||
class Wallet
|
||
{
|
||
/** @EmbedOne(targetDocument="Money") */
|
||
private $money;
|
||
|
||
public function setMoney(Money $money)
|
||
{
|
||
$this->money = $money;
|
||
}
|
||
//...
|
||
}
|
||
//...
|
||
$wallet = new Wallet();
|
||
$wallet->setMoney(new Money(34.39));
|
||
$dm->persist($wallet);
|
||
$dm->flush();
|
||
|
||
Unlike normal documents, embedded documents cannot specify their own database or
|
||
collection. That said, a single embedded document class may be used with
|
||
multiple document classes, and even other embedded documents!
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
indexes - Specifies an array of indexes for this embedded document, to be
|
||
included in the schemas of any embedding documents.
|
||
|
||
@Field
|
||
------
|
||
|
||
Marks an annotated instance variable for persistence. Values for this field will
|
||
be saved to and loaded from the document store as part of the document class'
|
||
lifecycle.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
type - Name of the ODM type, which will determine the value's representation
|
||
in PHP and BSON (i.e. MongoDB). See :ref:`doctrine_mapping_types` for a list
|
||
of types. Defaults to "string".
|
||
-
|
||
name - By default, the property name is used for the field name in MongoDB;
|
||
however, this option may be used to specify a database field name.
|
||
-
|
||
nullable - By default, ODM will ``$unset`` fields in MongoDB if the PHP value
|
||
is null. Specify true for this option to force ODM to store a null value in
|
||
the database instead of unsetting the field.
|
||
|
||
Examples:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Field(type="string")
|
||
*/
|
||
protected $username;
|
||
|
||
/**
|
||
* @Field(type="string", name="co")
|
||
*/
|
||
protected $country;
|
||
|
||
/**
|
||
* @Field(type="float")
|
||
*/
|
||
protected $height;
|
||
|
||
@File
|
||
-----
|
||
|
||
Marks an annotated instance variable as a file. Additionally, this instructs ODM
|
||
to store the entire document in `GridFS`_. Only a single field in a document may
|
||
be mapped as a file.
|
||
|
||
The instance variable will be an ``Doctrine\MongoDB\GridFSFile`` object, which
|
||
is a wrapper class for `MongoGridFSFile`_ and facilitates access to the file
|
||
data in GridFS. If the variable is a file path string when the document is first
|
||
persisted, ODM will convert it to GridFSFile object automatically.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @File */
|
||
private $file;
|
||
|
||
Additional fields can be mapped in GridFS documents like any other, but metadata
|
||
fields set by the driver (e.g. ``length``) should be mapped with `@NotSaved`_ so
|
||
as not to inadvertently overwrite them. Some metadata fields, such as
|
||
``filename`` may be modified and do not require `@NotSaved`_. In the following
|
||
example, we also add a custom field to refer to the corresponding User document
|
||
that created the file.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="string") */
|
||
private $filename;
|
||
|
||
/** @NotSaved(type="int") */
|
||
private $length;
|
||
|
||
/** @NotSaved(type="string") */
|
||
private $md5;
|
||
|
||
/** @NotSaved(type="date") */
|
||
private $uploadDate;
|
||
|
||
/** @ReferenceOne(targetDocument="Documents\User") */
|
||
private $uploadedBy;
|
||
|
||
@Float
|
||
------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "float".
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated because it uses a keyword that was reserved in
|
||
PHP 7. It will be removed in ODM 2.0. Please use the `@Field`_ annotation
|
||
with type "float".
|
||
|
||
|
||
.. _haslifecyclecallbacks:
|
||
|
||
@HasLifecycleCallbacks
|
||
----------------------
|
||
|
||
This annotation must be set on the document class to instruct Doctrine to check
|
||
for lifecycle callback annotations on public methods. Using `@PreFlush`_,
|
||
`@PreLoad`_, `@PostLoad`_, `@PrePersist`_, `@PostPersist`_, `@PreRemove`_,
|
||
`@PostRemove`_, `@PreUpdate`_, or `@PostUpdate`_ on methods without this
|
||
annotation will cause Doctrine to ignore the callbacks.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class User
|
||
{
|
||
/** @PostPersist */
|
||
public function sendWelcomeEmail() {}
|
||
}
|
||
|
||
@Hash
|
||
-----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "hash". Stores and retrieves
|
||
the value as an associative array.
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "hash".
|
||
|
||
@Id
|
||
---
|
||
|
||
The annotated instance variable will be marked as the document identifier. The
|
||
default behavior is to store a `MongoId`_ instance, but you may customize this
|
||
via the :ref:`strategy <basic_mapping_identifiers>` attribute.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document */
|
||
class User
|
||
{
|
||
/** @Id */
|
||
protected $id;
|
||
}
|
||
|
||
@Increment
|
||
----------
|
||
|
||
The increment type is just like an integer field, except that it will be updated
|
||
using the ``$inc`` operator instead of ``$set``:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
class Package
|
||
{
|
||
/** @Increment */
|
||
private $downloads = 0;
|
||
|
||
public function incrementDownloads()
|
||
{
|
||
$this->downloads++;
|
||
}
|
||
|
||
// ...
|
||
}
|
||
|
||
Now, update a Package instance like so:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
$package->incrementDownloads();
|
||
$dm->flush();
|
||
|
||
The query sent to Mongo would resemble the following:
|
||
|
||
.. code-block:: json
|
||
|
||
{ "$inc": { "downloads": 1 } }
|
||
|
||
The field will be incremented by the difference between the new and old values.
|
||
This is useful if many requests are attempting to update the field concurrently.
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "int" or "float" and use the "increment"
|
||
strategy.
|
||
|
||
@Index
|
||
------
|
||
|
||
This annotation is used inside of the class-level `@Document`_ or
|
||
`@EmbeddedDocument`_ annotations to specify indexes to be created on the
|
||
collection (or embedding document's collection in the case of
|
||
`@EmbeddedDocument`_). It may also be used at the property-level to define
|
||
single-field indexes.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
keys - Mapping of indexed fields to their ordering or index type. ODM will
|
||
allow "asc" and "desc" to be used in place of ``1`` and ``-1``,
|
||
respectively. Special index types (e.g. "2dsphere") should be specified as
|
||
strings. This is required when `@Index`_ is used at the class level.
|
||
-
|
||
options - Options for creating the index
|
||
|
||
The ``keys`` and ``options`` attributes correspond to the arguments for
|
||
`MongoCollection::createIndex() <http://php.net/manual/en/mongocollection.createindex.php>`_.
|
||
ODM allows mapped field names (i.e. PHP property names) to be used when defining
|
||
``keys``.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document(
|
||
* indexes={
|
||
* @Index(keys={"username"="desc"}, options={"unique"=true})
|
||
* }
|
||
* )
|
||
*/
|
||
class User
|
||
{
|
||
//...
|
||
}
|
||
|
||
If you are creating a single-field index, you can simply specify an `@Index`_ or
|
||
`@UniqueIndex`_ on a mapped property:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="string") @UniqueIndex */
|
||
private $username;
|
||
|
||
@Indexes
|
||
--------
|
||
|
||
This annotation may be used at the class level to specify an array of `@Index`_
|
||
annotations. It is functionally equivalent to using the ``indexes`` option for
|
||
the `@Document`_ or `@EmbeddedDocument`_ annotations.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @Indexes({
|
||
* @Index(keys={"username"="desc"}, options={"unique"=true})
|
||
* })
|
||
*/
|
||
class User
|
||
{
|
||
//...
|
||
}
|
||
|
||
@InheritanceType
|
||
----------------
|
||
|
||
This annotation must appear on the top-most class in an
|
||
:ref:`inheritance hierarchy <inheritance_mapping>`. ``SINGLE_COLLECTION`` and
|
||
``COLLECTION_PER_CLASS`` are currently supported.
|
||
|
||
Examples:
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @InheritanceType("COLLECTION_PER_CLASS")
|
||
*/
|
||
class Person
|
||
{
|
||
// ...
|
||
}
|
||
|
||
/**
|
||
* @Document
|
||
* @InheritanceType("SINGLE_COLLECTION")
|
||
* @DiscriminatorField("type")
|
||
* @DiscriminatorMap({"person"="Person", "employee"="Employee"})
|
||
*/
|
||
class Person
|
||
{
|
||
// ...
|
||
}
|
||
|
||
@Int
|
||
----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "int".
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Int */
|
||
private $columns;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated because it uses a keyword that was reserved in
|
||
PHP 7. It will be removed in ODM 2.0. Please use the `@Field`_ annotation
|
||
with type "int".
|
||
|
||
@Integer
|
||
--------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "integer". Internally it uses
|
||
exactly same logic as `@Int`_ annotation and "int" type.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Integer */
|
||
private $columns;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "int".
|
||
|
||
@Key
|
||
----
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "key". The value will be
|
||
converted to `MongoMaxKey`_ or `MongoMinKey`_ if it is true or false,
|
||
respectively.
|
||
|
||
.. note::
|
||
|
||
The BSON MaxKey and MinKey types are internally used by MongoDB for indexing
|
||
and sharding. There is generally no reason to use these in an application.
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "key".
|
||
|
||
.. _annotations_reference_lock:
|
||
|
||
@Lock
|
||
-----
|
||
|
||
The annotated instance variable will be used to store lock information for :ref:`pessimistic locking <transactions_and_concurrency_pessimistic_locking>`.
|
||
This is only compatible with the ``int`` type, and cannot be combined with `@Id`_.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="int") @Lock */
|
||
private $lock;
|
||
|
||
@MappedSuperclass
|
||
-----------------
|
||
|
||
The annotation is used to specify classes that are parents of document classes
|
||
and should not be managed directly. See
|
||
:ref:`inheritance mapping <inheritance_mapping>` for additional information.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @MappedSuperclass */
|
||
class BaseDocument
|
||
{
|
||
// ...
|
||
}
|
||
|
||
@NotSaved
|
||
---------
|
||
|
||
The annotation is used to specify properties that are loaded if they exist in
|
||
MongoDB; however, ODM will not save the property value back to the database.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @NotSaved */
|
||
public $field;
|
||
|
||
@PostLoad
|
||
---------
|
||
|
||
Marks a method on the document class to be called on the ``postLoad`` event. The
|
||
`@HasLifecycleCallbacks`_ annotation must be present on the same class for the
|
||
method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PostLoad */
|
||
public function postLoad()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PostPersist
|
||
------------
|
||
|
||
Marks a method on the document class to be called on the ``postPersist`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PostPersist */
|
||
public function postPersist()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PostRemove
|
||
-----------
|
||
|
||
Marks a method on the document class to be called on the ``postRemove`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PostRemove */
|
||
public function postRemove()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PostUpdate
|
||
-----------
|
||
|
||
Marks a method on the document class to be called on the ``postUpdate`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PostUpdate */
|
||
public function postUpdate()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PreFlush
|
||
---------
|
||
|
||
Marks a method on the document class to be called on the ``preFlush`` event. The
|
||
`@HasLifecycleCallbacks`_ annotation must be present on the same class for the
|
||
method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PreFlush */
|
||
public function preFlush()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PreLoad
|
||
--------
|
||
|
||
Marks a method on the document class to be called on the ``preLoad`` event. The
|
||
`@HasLifecycleCallbacks`_ annotation must be present on the same class for the
|
||
method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
use Doctrine\ODM\MongoDB\Event\PreLoadEventArgs;
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PreLoad */
|
||
public function preLoad(PreLoadEventArgs $eventArgs)
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PrePersist
|
||
-----------
|
||
|
||
Marks a method on the document class to be called on the ``prePersist`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PrePersist */
|
||
public function prePersist()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PreRemove
|
||
----------
|
||
|
||
Marks a method on the document class to be called on the ``preRemove`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PreRemove */
|
||
public function preRemove()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@PreUpdate
|
||
----------
|
||
|
||
Marks a method on the document class to be called on the ``preUpdate`` event.
|
||
The `@HasLifecycleCallbacks`_ annotation must be present on the same class for
|
||
the method to be registered.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Document @HasLifecycleCallbacks */
|
||
class Article
|
||
{
|
||
// ...
|
||
|
||
/** @PreUpdate */
|
||
public function preUpdated()
|
||
{
|
||
// ...
|
||
}
|
||
}
|
||
|
||
See :ref:`lifecycle_events` for more information.
|
||
|
||
@ReadPreference
|
||
---------------
|
||
|
||
Specifies `Read Preference <https://docs.mongodb.com/manual/core/read-preference/>_`
|
||
that will be applied when querying for the annotated document.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
namespace Documents;
|
||
|
||
/**
|
||
* @Document
|
||
* @ODM\ReadPreference("primaryPreferred", tags={
|
||
* { "dc"="east" },
|
||
* { "dc"="west" },
|
||
* { }
|
||
* })
|
||
*/
|
||
class User
|
||
{
|
||
}
|
||
|
||
.. note::
|
||
|
||
This annotation can not be combined with ``slaveOkay``, such combination will
|
||
produce a ``MappingException`` error.
|
||
|
||
.. _annotations_reference_reference_many:
|
||
|
||
@ReferenceMany
|
||
--------------
|
||
|
||
Defines that the annotated instance variable holds a collection of referenced
|
||
documents.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
targetDocument - A |FQCN| of the target document. A ``targetDocument`` is
|
||
required when using ``storeAs: id``.
|
||
-
|
||
simple - deprecated (use ``storeAs: id``)
|
||
-
|
||
storeAs - Indicates how to store the reference. ``id`` stores the identifier,
|
||
``ref`` an embedded object containing the ``id`` field and (optionally) a
|
||
discriminator. ``dbRef`` and ``dbRefWithDb`` store a `DBRef`_ object and
|
||
are deprecated in favor of ``ref``. Note that ``id`` references are not
|
||
compatible with the discriminators.
|
||
-
|
||
cascade - Cascade Option
|
||
-
|
||
discriminatorField - The field name to store the discriminator value within
|
||
the reference object.
|
||
-
|
||
discriminatorMap - Map of discriminator values to class names.
|
||
-
|
||
defaultDiscriminatorValue - A default value for discriminatorField if no value
|
||
has been set in the referenced document.
|
||
-
|
||
inversedBy - The field name of the inverse side. Only allowed on owning side.
|
||
-
|
||
mappedBy - The field name of the owning side. Only allowed on the inverse side.
|
||
-
|
||
repositoryMethod - The name of the repository method to call to populate this reference.
|
||
-
|
||
sort - The default sort for the query that loads the reference.
|
||
-
|
||
criteria - Array of default criteria for the query that loads the reference.
|
||
-
|
||
limit - Limit for the query that loads the reference.
|
||
-
|
||
skip - Skip for the query that loads the reference.
|
||
-
|
||
strategy - The strategy used to persist changes to the collection. Possible
|
||
values are ``addToSet``, ``pushAll``, ``set``, and ``setArray``. ``pushAll``
|
||
is the default. See :ref:`storage_strategies` for more information.
|
||
-
|
||
collectionClass - A |FQCN| of class that implements ``Collection`` interface
|
||
and is used to hold documents. Doctrine's ``ArrayCollection`` is used by default
|
||
-
|
||
prime - A list of references contained in the target document that will be
|
||
initialized when the collection is loaded. Only allowed for inverse
|
||
references.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @ReferenceMany(
|
||
* strategy="set",
|
||
* targetDocument="Documents\Item",
|
||
* cascade="all",
|
||
* sort={"sort_field": "asc"}
|
||
* discriminatorField="type",
|
||
* discriminatorMap={
|
||
* "book"="Documents\BookItem",
|
||
* "song"="Documents\SongItem"
|
||
* },
|
||
* defaultDiscriminatorValue="book"
|
||
* )
|
||
*/
|
||
private $cart;
|
||
|
||
.. _annotations_reference_reference_one:
|
||
|
||
@ReferenceOne
|
||
-------------
|
||
|
||
Defines an instance variable holds a related document instance.
|
||
|
||
Optional attributes:
|
||
|
||
-
|
||
targetDocument - A |FQCN| of the target document. A ``targetDocument`` is
|
||
required when using ``storeAs: id``.
|
||
-
|
||
simple - deprecated (use ``storeAs: id``)
|
||
-
|
||
storeAs - Indicates how to store the reference. ``id`` stores the identifier,
|
||
``ref`` an embedded object containing the ``id`` field and (optionally) a
|
||
discriminator. ``dbRef`` and ``dbRefWithDb`` store a `DBRef`_ object and
|
||
are deprecated in favor of ``ref``. Note that ``id`` references are not
|
||
compatible with the discriminators.
|
||
-
|
||
cascade - Cascade Option
|
||
-
|
||
discriminatorField - The field name to store the discriminator value within
|
||
the reference object.
|
||
-
|
||
discriminatorMap - Map of discriminator values to class names.
|
||
-
|
||
defaultDiscriminatorValue - A default value for discriminatorField if no value
|
||
has been set in the referenced document.
|
||
-
|
||
inversedBy - The field name of the inverse side. Only allowed on owning side.
|
||
-
|
||
mappedBy - The field name of the owning side. Only allowed on the inverse side.
|
||
-
|
||
repositoryMethod - The name of the repository method to call to populate this reference.
|
||
-
|
||
sort - The default sort for the query that loads the reference.
|
||
-
|
||
criteria - Array of default criteria for the query that loads the reference.
|
||
-
|
||
limit - Limit for the query that loads the reference.
|
||
-
|
||
skip - Skip for the query that loads the reference.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @ReferenceOne(
|
||
* targetDocument="Documents\Item",
|
||
* cascade="all",
|
||
* discriminatorField="type",
|
||
* discriminatorMap={
|
||
* "book"="Documents\BookItem",
|
||
* "song"="Documents\SongItem"
|
||
* },
|
||
* defaultDiscriminatorValue="book"
|
||
* )
|
||
*/
|
||
private $cart;
|
||
|
||
@ShardKey
|
||
---------
|
||
|
||
This annotation may be used at the class level to specify a shard key to be used
|
||
for sharding the document collection.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/**
|
||
* @Document
|
||
* @ShardKey(keys={"username"="asc"})
|
||
*/
|
||
class User
|
||
{
|
||
//...
|
||
}
|
||
|
||
|
||
@String
|
||
-------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "string".
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @String */
|
||
private $username;
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated because it uses a keyword that was reserved in
|
||
PHP 7. It will be removed in ODM 2.0. Please use the `@Field`_ annotation
|
||
with type "string".
|
||
|
||
|
||
@Timestamp
|
||
----------
|
||
|
||
Alias of `@Field`_, with "type" attribute set to "timestamp". The value will be
|
||
converted to `MongoTimestamp`_ for storage in MongoDB.
|
||
|
||
.. note::
|
||
|
||
The BSON timestamp type is an internal type used for MongoDB's replication
|
||
and sharding. If you need to store dates in your application, you should use
|
||
the "date" type instead.
|
||
|
||
.. note::
|
||
|
||
This annotation is deprecated and will be removed in ODM 2.0. Please use the
|
||
`@Field`_ annotation with type "timestamp".
|
||
|
||
@UniqueIndex
|
||
------------
|
||
|
||
Alias of `@Index`_, with the ``unique`` option set by default.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="string") @UniqueIndex */
|
||
private $email;
|
||
|
||
.. _annotations_reference_version:
|
||
|
||
@Version
|
||
--------
|
||
|
||
The annotated instance variable will be used to store version information for :ref:`optimistic locking <transactions_and_concurrency_optimistic_locking>`.
|
||
This is only compatible with ``int`` and ``date`` field types, and cannot be combined with `@Id`_.
|
||
|
||
.. code-block:: php
|
||
|
||
<?php
|
||
|
||
/** @Field(type="int") @Version */
|
||
private $version;
|
||
|
||
By default, Doctrine ODM updates :ref:`embed-many <embed_many>` and
|
||
:ref:`reference-many <reference_many>` collections in separate write operations,
|
||
which do not bump the document version. Users employing document versioning are
|
||
encouraged to use the :ref:`atomicSet <atomic_set>` or
|
||
:ref:`atomicSetArray <atomic_set_array>` strategies for such collections, which
|
||
will ensure that collections are updated in the same write operation as the
|
||
versioned parent document.
|
||
|
||
.. _BSON specification: http://bsonspec.org/spec.html
|
||
.. _DBRef: https://docs.mongodb.com/manual/reference/database-references/#dbrefs
|
||
.. _geoNear command: https://docs.mongodb.com/manual/reference/command/geoNear/
|
||
.. _GridFS: https://docs.mongodb.com/manual/core/gridfs/
|
||
.. _MongoBinData: http://php.net/manual/en/class.mongobindata.php
|
||
.. _MongoDate: http://php.net/manual/en/class.mongodate.php
|
||
.. _MongoGridFSFile: http://php.net/manual/en/class.mongogridfsfile.php
|
||
.. _MongoId: http://php.net/manual/en/class.mongoid.php
|
||
.. _MongoMaxKey: http://php.net/manual/en/class.mongomaxkey.php
|
||
.. _MongoMinKey: http://php.net/manual/en/class.mongominkey.php
|
||
.. _MongoTimestamp: http://php.net/manual/en/class.mongotimestamp.php
|
||
.. |FQCN| raw:: html
|
||
<abbr title="Fully-Qualified Class Name">FQCN</abbr>
|