Я использую 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 строки)
Извините, что задал так много вопросов.Любая помощь будет высоко ценится