symfony Doctrine -- создать foreign key -- связь One To One между сущностями (внешние ключи)

Описать связь таблиц через внешний ключ можно также с помощью аннотаций к свойствам.

Простейший пример - однонаправленная связь

Однонаправленная связь Один-к-Одному (когда единственному значению одной сущности соответствует одно значение другой сущности):

<?php
/** @Entity */
class Product
{
    // ...

    /**
     * One Product has One Shipment.
     * @OneToOne(targetEntity="Shipment")
     * @JoinColumn(name="shipment_id", referencedColumnName="id")
     */
    private $shipment;

    // ...
}

/** @Entity */
class Shipment
{
    // ...
}

Различия между однонаправленными и двусторонними связями

Если связь будет односторонняя, Вы сможете обратиться к одной сущности через объект другой, но не наоборот:

 $Product->getShipment() //только так
 $Shipment->getProduct() //но не так

Это оправдано только если такой вариант обоснован бизнес-логикой, например, если нас интересует, куда был отправлен продукт, но не интересует, какие продукты были отправлены туда же. Иначе целесообразно организовать двустороннюю связь.

Двусторонняя связь

<?php
/** @Entity */
class Customer
{
    // ...

    /**
     * One Customer has One Cart.
     * @OneToOne(targetEntity="Cart", mappedBy="customer")
     */
    private $cart;

    // ...
}

/** @Entity */
class Cart
{
    // ...

    /**
     * One Cart has One Customer.
     * @OneToOne(targetEntity="Customer", inversedBy="cart")
     * @JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;

    // ...
}

Сохранение связанных объектов

http://symfony.com/doc/current/doctrine/...

Печать связанных объектов

http://symfony.com/doc/current/doctrine/...

Источник

О всевозможных вариантах связей в таблицах можно почитать здесь.
Официальная Документация Symfony

vedro-compota's picture

в заголовках следует указывать русские эквиваленты терминов (тут поправил)

_____________
матфак вгу и остальная классика =)