Как я могу создать дочернюю таблицу атрибутов с помощью доктрины 2 (в основном, как таблица соединения, но без сущности на другой стороне).Нужно ли создавать для него отдельную сущность (я знаю, что если я создаю ManyToMany с таблицей соединений, она просто создаст таблицу соединений в БД, но не создаст сущность).
т.е.иметь рабочие заказы, которые могут иметь несколько назначенных рабочих дат.Я хочу иметь возможность заполнить таблицу этими датами, поэтому
______________________
| Orders |
|____________________|
id
1
2
3
______________________
| Order_Dates |
|____________________|
order_id | Date
1 | 2019-01-01
1 | 2019-05-01
2 | 2019-01-01
2 | 2019-02-01
2 | 2019-03-01
3 | 2019-01-02
3 | 2019-01-05
Итак, в общем, пока у меня есть
class Orders
{
public function __construct()
{
$this->dates = new ArrayCollection();
}
/**
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* One Order has Many Dates
*/
private $dates;
public function getDates() : ArrayCollection
{
return $this->dates;
}
public function addDate(\DateTime $date): self
{
$this->dates->add($date);
return $this;
}
public function setDates(ArrayCollection $dates): self
{
$this->dates = $dates;
return $this;
}
}
Я предполагаю, что мне нужно @OneToMany или что-то, но против меняЯ ожидаю, что дочерняя таблица будет ЗАПОЛНЕНА ОТ Объектом заказа, а не отображением.Все, что я смотрю в документации по ассоциации доктрин здесь, похоже, предполагает какое-то отображение (возможно, я неправильно его читаю?)
Заранее спасибо!
Редактировать:
Теперь это мои контроллеры:
Заказы
/**
* @ORM\OneToMany(targetEntity="OrderDates", mappedBy="order", cascade={"persist", "remove"}, orphanRemoval=TRUE)
*/
private $dates;
...
public function getDates() : PersistentCollection
{
return $this->dates;
}
public function addDate(\DateTime $date): self
{
$orderDate = new OrderDates();
$orderDate->setDate($date);
$orderDate->setOrder($this);
$this->dates[] = $orderDate;
return $this;
}
public function setDates(array $dates): self
{
foreach($dates as $date)
{
$this->addDate(new \DateTime($date));
}
return $this;
}
Даты заказа
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\OrderDatesRepository")
*/
class OrderDates
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="datetime")
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="Orders", inversedBy="dates")
*/
private $order;
public function getId(): ?int
{
return $this->id;
}
public function getDate(): ?\DateTimeInterface
{
return $this->date;
}
public function setDate(\DateTimeInterface $date): self
{
$this->date = $date;
return $this;
}
public function getOrder(): Orders
{
return $this->order;
}
public function setOrder(Orders $order): self
{
$this->order = $order;
return $this;
}
}