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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
<?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\DbRefDecorator;
use Maslosoft\Mangan\Decorators\EmbedRefDecorator;
use Maslosoft\Mangan\Meta\DbRefMeta;
use Maslosoft\Mangan\Meta\ManganPropertyAnnotation;
use UnexpectedValueException;
/**
* DB reference annotation
*
* Most simple usage:
* ```
* @DbRef(Vendor\Package\ClassLiteral)
* ```
*
* Disable updates, long notation:
* ```
* @DbRef(Vendor\Package\ClassLiteral, updatable = false)
* ```
*
* Disable updates, short notation:
* ```
* @DbRef(Vendor\Package\ClassLiteral, false)
* ```
*
* @template DbRef(${class}, ${updatable})
*
* @Conflicts('Embedded')
* @Conflicts('EmbeddedArray')
* @Conflicts('DbRefArray')
* @Conflicts('Related')
* @Conflicts('RelatedArray')
*
* @Target('property')
* @author Piotr Maselkowski <pmaselkowski at gmail.com>
*/
class DbRefAnnotation extends ManganPropertyAnnotation
{
public $class;
public $updatable;
public $value;
public function init()
{
$refMeta = $this->getDbRefMeta();
$refMeta->single = true;
$refMeta->isArray = false;
$this->getEntity()->dbRef = $refMeta;
$this->getEntity()->propagateEvents = true;
$this->getEntity()->owned = true;
$this->getEntity()->decorators[] = DbRefDecorator::class;
$this->getEntity()->decorators[] = EmbedRefDecorator::class;
}
protected function getDbRefMeta()
{
$data = ParamsExpander::expand($this, ['class', 'updatable']);
$params = [
$this->getMeta()->type()->name,
$this->getEntity()->name
];
$msg = vsprintf("Parameter `updatable' must be of type `boolean` (or be omitted) on %s:%s", $params);
assert(empty($data['updatable']) || is_bool($data['updatable']), new UnexpectedValueException($msg));
$refMeta = new DbRefMeta($data);
if (!$refMeta->class)
{
$refMeta->class = $this->getMeta()->type()->name;
}
$this->getEntity()->updatable = $refMeta->updatable;
return $refMeta;
}
}
API documentation generated by ApiGen