Maslosoft Mangan API
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
<?php
/**
* This software package is licensed under AGPL or Commercial license.
*
* @package maslosoft/mangan
* @licence AGPL or Commercial
* @copyright Copyright (c) Piotr Masełkowski <pmaselkowski@gmail.com>
* @copyright Copyright (c) Maslosoft
* @copyright Copyright (c) Others as mentioned in code
* @link https://maslosoft.com/mangan/
*/
namespace Maslosoft\Mangan\Annotations;
use Maslosoft\Addendum\Helpers\ParamsExpander;
use Maslosoft\Mangan\Decorators\EmbeddedDecorator;
use Maslosoft\Mangan\Meta\EmbeddedMeta;
use Maslosoft\Mangan\Meta\ManganPropertyAnnotation;
/**
* Annotation for embedded document in mongo
* `defaultClassName` will be used for getting empty properties,
* but any type of embedded document can be stored within this field
* Examples:
*
* Embed with namespaced class literal:
*
* ```
* @Embedded(Company\Product\EmbeddedClassName)
* ```
*
* Embed with default class - short notation - `EmbeddedClassName` imported via
* use statement:
*
* ```
* @Embedded(EmbeddedClassName)
* ```
*
* @Conflicts('EmbeddedArray')
* @Conflicts('DbRef')
* @Conflicts('DbRefArray')
* @Conflicts('Related')
* @Conflicts('RelatedArray')
*
* @Target('property')
* @template Embedded(${defaultClassName})
* @author Piotr
*/
class EmbeddedAnnotation extends ManganPropertyAnnotation
{
public $value = true;
public function init()
{
$data = ParamsExpander::expand($this, ['class']);
$meta = new EmbeddedMeta($data);
$meta->single = true;
$this->getEntity()->embedded = $meta;
$this->getEntity()->propagateEvents = true;
$this->getEntity()->owned = true;
$this->getEntity()->decorators[] = EmbeddedDecorator::class;
}
}
API documentation generated by ApiGen