Объединение данных и вставка в базу данных с отношением один к одному

У меня проблема со вставкой данных в базу данных с отношением один к одному. Проблема в том, что я не могу использовать FormBuilder. Поскольку данные поступают из формы js. Пользователь выбирает поле статуса из раскрывающегося списка. Теперь я хотел бы вставить возвращенный идентификатор в заказы объектов.

Статус сущности:

/**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="status", type="string", length=30)
     */
    private $status;

Сущность заказа:

/**
     * @var int
     *
     *  @OneToOne(targetEntity="AppBundle\Entity\Status", fetch="EAGER",cascade={"persist"})
     * @JoinColumn(name="Status_id", referencedColumnName="id")
     */
    private $Status;

Сервис:

$order=new Orders();
        $status=new GlobalStatus();
        $status->getId(1);
        $order->setGlobalStatus($status);

        $this->em->persist($order);
        $this->em->flush();

Затем доктрина пытается добавить данные в таблицу состояния. Если я не пытаюсь создать экземпляр Status, я получаю сообщение об ошибке :( Может ли кто-нибудь посоветовать мне, как добавить эти данные?


person grda    schedule 12.01.2018    source источник
comment
Имеет ли для вас значение наличие стороны-владельца в Order объекте?   -  person Łukasz D. Tulikowski    schedule 12.01.2018
comment
@ ŁukaszD.Tulikowski Не знаю, хорошо ли я тебя понял. К сожалению, я не могу отказаться от формы js. Поскольку данные для дроп-листов загружаются по ajax. А с формбилдером не могу этого сделать :(   -  person grda    schedule 12.01.2018


Ответы (1)


Статус сущности

/**
 * @var int
 *
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(name="id", type="integer")
 */
protected $id;

/**
 * @var Order
 *
 * @ORM\OneToOne(targetEntity="AppBundle\Entity\Order")
 */
protected $order;

Сущность заказа:

/**
 * @var Status
 *
 * @ORM\Column(name="status", type="string", length=30)
 */
protected $status;

Ваши услуги:

class Foo
{
    /**
     * @param Status $status
     */
    public function bar(Status $status)
    {
        if (!$status instanceof Status) {
            return;
        }

        $order = new Order(); //Should be singular
        $order->setStatus($status); //If it's `global` consider use enumType instead

        $this->em->persist($order);
        $this->em->flush();
    }
}

Как сделать так, чтобы вы извлекали данные формы и привязывали их к Status объекту?

person Łukasz D. Tulikowski    schedule 12.01.2018
comment
Я хотел бы отправить всю форму запроса в сервис. Потому что эти данные все равно будут обрабатываться в сервисе. - person grda; 12.01.2018
comment
Может быть, я полностью ошибаюсь в предмете :( В таблице местоположения расположены определенные места для хранения (склад 1, склад 2 и т. д.). Я хотел бы заказать вставку в таблицу id места для хранения. Важно, чтобы заказ мог иметь только одно место хранения.Вы можете посоветовать мне, какие отношения использовать в этом случае? - person grda; 12.01.2018
comment
@grda OneToOne, чтобы гарантировать, что заказ может иметь только одно место хранения. - person Łukasz D. Tulikowski; 12.01.2018
comment
@grda Вы хотите отправить всю форму запроса в службу и привязать ее к объекту - мне кажется, это нормально. Вы знаете, как это сделать? - person Łukasz D. Tulikowski; 12.01.2018
comment
Предположения изменились, но большое спасибо за помощь. С передачей заявки в сервис я справлюсь - person grda; 13.01.2018