Skip to content

Latest commit

 

History

History
343 lines (307 loc) · 6.74 KB

Entity.md

File metadata and controls

343 lines (307 loc) · 6.74 KB

An Entity Demo

<?php

namespace AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Menu
 *
 * @ORM\Table(name="menu")
 * * @ORM\Table(
 *          name="menu",
 *          options={"comment": "菜单表"}, 
 *          indexes={
 *          @ORM\Index(name="case_english_name_idx", columns={"english_name"}),
 *          @ORM\Index(name="case_date_idx", columns={"create_at", "update_at"})
 *          })
 * @ORM\Entity(repositoryClass="AdminBundle\Repository\MenuRepository")
 * @ORM\HasLifecycleCallbacks()
 * @UniqueEntity(
 *     fields={"name", "itemCode"},
 *     message="{{ value }}已存在"
 * ) //两个值的组合不相同,注意name和itemCode必须都在FormType里面,且不能设置为disabled,可以设置readonly
 * @UniqueEntity(fields = {"itemCode"}, message="itemCode {{ value }}已存在") //itemCode不能相同
 * @UniqueEntity(fields = {"name"}, message="name {{ value }}已存在")
 */
class Menu
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=60,unique=true, options={"comment": "菜单名称"})
     * @Assert\NotBlank(message="名称不能为空")
     * @Assert\Length(
     *      max = 60,
     *      maxMessage = "名称最多60个字符"
     *      )
     */
    private $name;
    /**
     * @var string
     *
     * @ORM\Column(name="english_name", type="string", length=60,nullable=true, options={"comment": "英文名称"})
     */
    private $englishName;

    /**
     * @var int
     *
     * @ORM\Column(name="level", type="smallint")
     */
    private $level;

    /**
     * @var string
     *
     * @ORM\Column(name="number", type="decimal", precision=30, scale=2, options={"comment":"数值"})
     */
    private $number;
    
     /**
     * @var string
     *
     * @ORM\Column(name="mobile", type="string", length=11, options={"comment":"联系人手机号"})
     * @Assert\NotBlank(message="联系人手机号不能为空")
     * @Assert\Length(
     *      max = 11,
     *      min = 11,
     *      exactMessage = "联系人手机号应为11位"
     *      )
     */
    private $mobile;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="create_at", type="datetime")
     */
    private $createAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="update_at", type="datetime")
     */
    private $updateAt;

    /**
     * One menu has Many menus.
     *
     * @ORM\ManyToOne(targetEntity="Menu", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $parent;

    /**
     * Many menus have One menu.
     *
     * @ORM\OneToMany(targetEntity="Menu", mappedBy="parent")
     * @ORM\OrderBy({"sort" = "DESC", "id" = "DESC"})
     */
    private $children;


    public function __construct()
    {
        $this->children = new ArrayCollection();
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Menu
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
    
    /**
     * format name
     *
     * 美化返回名称
     */
    public function getDropName()
    {
        return str_pad(' ', $this->level) . $this->name;
    }
    
    /**
     * Set englishName
     *
     * @param string $englishName
     *
     * @return Menu
     */
    public function setEnglishName($englishName)
    {
        $this->englishName = $englishName;

        return $this;
    }

    /**
     * Get englishName
     *
     * @return string
     */
    public function getEnglishName()
    {
        return $this->englishName;
    }
    /**
     * Set level
     *
     * @param integer $level
     *
     * @return Menu
     */
    public function setLevel($level)
    {
        $this->level = $level;

        return $this;
    }

    /**
     * Get level
     *
     * @return integer
     */
    public function getLevel()
    {
        return $this->level;
    }
    /**
     * Set createAt
     *
     * @param \DateTime $createAt
     *
     * @return Menu
     */
    public function setCreateAt($createAt)
    {
        $this->createAt = $createAt;

        return $this;
    }

    /**
     * Get createAt
     *
     * @return \DateTime
     */
    public function getCreateAt()
    {
        return $this->createAt;
    }

    /**
     * Set updateAt
     *
     * @param \DateTime $updateAt
     *
     * @return Menu
     */
    public function setUpdateAt($updateAt)
    {
        $this->updateAt = $updateAt;

        return $this;
    }

    /**
     * Get updateAt
     *
     * @return \DateTime
     */
    public function getUpdateAt()
    {
        return $this->updateAt;
    }

    /**
     * Set parent
     *
     * @param Category $parent
     *
     * @return Category
     */
    public function setParent(Menu $parent = null)
    {
        $this->parent = $parent;

        return $this;
    }

    /**
     * Get parent
     *
     * @return Category
     */
    public function getParent()
    {
        return $this->parent;
    }

    public function getChildren()
    {
        return $this->children;
    }

    /**
     * @ORM\PrePersist()
     */
    public function prePersist()
    {
        if($this->getParent() == null){
            $this->setLevel(1);
        }else{
            $this->setLevel($this->getParent()->getLevel()+1);
        }
        if($this->getCreateAt() == null){
            $this->setCreateAt(new \DateTime());
        }
        $this->setUpdateAt(new \DateTime());
    }
    /**
     * @ORM\PreUpdate()
     */
    public function preUpdate()
    {
        if($this->getParent() == null){
            $this->setLevel(1);
        }else{
            $this->setLevel($this->getParent()->getLevel()+1);
        }
        $this->setUpdateAt(new \DateTime());
    }

    /**
     * Add child
     *
     * @param \AdminBundle\Entity\Menu $child
     *
     * @return Menu
     */
    public function addChild(\AdminBundle\Entity\Menu $child)
    {
        $this->children[] = $child;

        return $this;
    }

    /**
     * Remove child
     *
     * @param \AdminBundle\Entity\Menu $child
     */
    public function removeChild(\AdminBundle\Entity\Menu $child)
    {
        $this->children->removeElement($child);
    }
}