Symfony OneToMany постоянные данные - PullRequest
0 голосов
/ 17 мая 2018

Я использую Symfony3.4 и имею следующие отношения в базе данных между House и Type сущностями:

                  house 
+----------------------------------------------+
| id |     title    |       description        |
+----------------------------------------------+
| 1  | some title 1 |    some description 1    |
+----------------------------------------------+
| 2  | some title 2 |    some description 2    |
+----------------------------------------------+

       type 
+----------------+
| id |   name    |
+----------------+
| 1  | shortstay |
+----------------+
| 2  | rent      |
+----------------+
| 4  | sell      |
+----------------+

                  house_types
+-----------------------------------+
| id | house_id | type_id |  price  |
+-----------------------------------+
| 1  |    1     |   2     | 1000    |
+-----------------------------------+
| 2  |    1     |   3     | 1000000 |
+-----------------------------------+
| 3  |    2     |   1     | 100     |
+-----------------------------------+
| 4  |    2     |   3     | 200000  |
+-----------------------------------+

Вот мои сущности:

Дом сущности

class House extends EntityBase
{
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\HouseHasTypes", mappedBy="houses", cascade={"persist","remove"})
     */
    protected $hasTypes;

Тип сущности

class Type extends EntityBase
{
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\HouseHasTypes", mappedBy="types", cascade={"persist","remove"})
     */
    protected $hasHouses;

ДомHasTypes сущность

class HouseHasTypes extends EntityBase
{
    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\House", cascade={"persist"}, fetch="EAGER")
     * @ORM\JoinColumn(name="house_id", referencedColumnName="id", nullable=true)
     */
    protected $houses;
    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Type", cascade={"persist","remove"}, fetch="EAGER" )
     * @ORM\JoinColumn(name="type_id", referencedColumnName="id",nullable=true)
     */
    protected $types;
    /**
     * @var int
     * 
     * @ORM\Column(name="price", type="integer")
     */
    protected $price;

Я сделалне совсем понять разницу между отношениями ManyToOne и OneToOne.Какой из них должен быть у меня?

Кроме того, каким будет самый простой способ справиться со вставкой новых данных в 2 объекта (House и HouseHasTypes).Прямо сейчас я могу отобразить флажки для каждой строки в таблице type следующим образом:

$builder
...
->add('hasTypes', EntityType::class, array(
                'required' => true,
                'class' => Type::class,
                'expanded' => true,
                'multiple' => true,
            ))

И в контроллере я планирую сделать foreach(){} для каждого из проверенных Type s.и setHouse() и setPrice() там.Есть ли другой более эффективный способ сделать это?

Как я могу отобразить столько текстовых полей, сколько есть вышеупомянутых флажков EntityType, чтобы определить цену для каждого выбранного Type?В настоящее время я жестко кодирую три элемента ввода текста html и скрываю их с помощью javascript на основе отмеченных флажков.Если я создаю пользовательскую форму, как я могу сказать ей сделать 3 ввода текста (поскольку в таблице сущностей 3 строки)

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

1 Ответ

0 голосов
/ 17 мая 2018

Модель вашей базы данных кажется правильной.

Чтобы определить отношения OneToMany, ManyToOne и OneToOne, я привел вам несколько примеров:

Представьте, что у нас есть две сущности: USER и ORDER.

OneToMany:

Пользователь может сделать 0, 1 или много заказов, верно?Это означает, что один пользователь может быть связан с 0, 1 или многими заказами.

USER(id:1) --> ORDER(id:1)
           --> ORDER(id:3)
           --> ORDER(id:8)

ManyToOne:

Заказ может сделать один и только один пользователь, верно?Это означает, что многие заказы могут быть связаны с одним пользователем.

ORDER(id:1) --> USER(id:1)
ORDER(id:3) --> USER(id:1)
ORDER(id:8) --> USER(id:1)

OneToOne:

Теперь представьте, что у нас есть две другие сущности: USER и EMAIL.

Пользователь можетиметь один и только один адрес электронной почты и адрес электронной почты может иметь только один право пользователя?Это означает, что один пользователь может быть связан с одним адресом электронной почты, а один адрес электронной почты может быть связан с одним пользователем.

USER(id:1) --> EMAIL(id:6)
USER(id:3) --> EMAIL(id:7)
USER(id:8) --> EMAIL(id:1)

Надеюсь, я был понятен.

По другим вопросам Symfonyавтоматически вставлять данные в форму отправки, если вы правильно определили свой метод получения и установки в объектах, не нужно делать foreach

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...