doctrine -- Встроенные классы (Embadded, Embeddable). Что это, как использовать
Primary tabs
Чтобы использовать в аннотациях класс, для которого нет соответствующей в БД таблицы, используются аннотации @Embedded и @Embeddable.
Embeddable - это встраеваемый класс. Такую аннотацию дают, когда связь с классом существует, и в структуре классов следует показать это, но таблицы для одного из классов нет, а значит, связи @One-To-Many или @One-To-One использовать не получится.
Итак, вот так описываем основной класс (класс с таблицей):
namespace App\Entity;
use App\Entity\VO\PhoneNumber;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Embedded;
/**
* @ORM\Entity(repositoryClass="App\Repository\ClientRepository")
* @ORM\Table(name="client")
*/
class Client
{
/**
* @var int
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="client_pkey")
*/
private $id;
/**
* @var PhoneNumber
*
* @Embedded(class = "App\Entity\VO\PhoneNumber", columnPrefix = "phone_")
*/
private $phone;
public function __construct()
{
$this->phoneNumber = new PhoneNumber();
}
}Встраеваемый класс (класс без таблицы):
namespace App\Entity\VO;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Embeddable;
/**
* @Embeddable
*/
class PhoneNumber
{
/**
* @ORM\Column(type="string", length=255)
*/
private $value;
}Подробнее здесь.
Внимание! Если у вас одновременно 2 встраеваемых класса возможно возникновение ошибки.
Источники
- https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/embeddables.html#initializing-embeddables
- https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html
- Log in to post comments
- 7077 reads