代码之家  ›  专栏  ›  技术社区  ›  Element Zero

如何在原则2中创建子属性表?

  •  0
  • Element Zero  · 技术社区  · 6 年前

    如何通过条令2创建子属性表(基本上类似于连接表,但另一侧没有实体)。我是否需要为它创建一个单独的实体(我知道如果我使用一个联接表创建一个ManyToMany,它只会在db中创建联接表,而不会创建实体)。

    i、 我有工作指令,可以有一堆指定的工作日期。我想把这些日期填满一张桌子

    ______________________
    |      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;
        }
    }
    

    订单实体,而不是映射。我在照片上看到的一切 doctrine association documentation 在这里似乎期待某种映射(也许我看错了?)

    编辑:

    这是我的控制器:

    订单

        /**
         * @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;
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   iiirxs    6 年前

    你呢

    总而言之:

    编辑:

    class Orders {
        // id and other fields here...
        /**
         * @ORM\OneToMany(targetEntity="OrderDates", mappedBy="order", cascade={"persist", "remove"}, orphanRemoval=TRUE)
         */
        private $dates;
    
        public function addDate(\DateTime $date): self
        {
            $orderDate = new OrderDates();
            $orderDate->setDate($date);
            $orderDate->setOrder($this);
            $this->dates[] = $orderDate;
    
            return $this;
        }
    }
    
    class OrderDates {
        // id here...
        /**
         * @ORM\ManyToOne(targetEntity="Order", inversedBy="dates")
         */
        private $order;
    
        /**
         * @var \DateTime
         *
         * @ORM\Column(name="date", type="datetime")
         */
        private $date;
        // setters and getters here
    }