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 встраеваемых класса возможно возникновение ошибки.
Источники
- Log in to post comments
- 6172 reads