开发者社区 问答 正文

初学symfony2框架,一下一对多映射如何做?

学symfony2框架,哪位师兄能指教一下一对多映射怎么做么?有命令生成不?

class Mapp
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var string $saysay
     *
     * @ORM\Column(name="saysay", type="string", length=255, nullable=false)
     */
    private $saysay;

    /**
     * @var string $log
     *
     * @ORM\Column(name="log", type="text", nullable=false)
     */
    private $log;


}
class People
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var string $discuss
     *
     * @ORM\Column(name="discuss", type="string", length=255, nullable=false)
     */
    private $discuss;


}

展开
收起
落地花开啦 2016-06-14 12:01:42 2222 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    A和B的一对一关系,在数据库里,可以在A上弄个字段存相应B记录的ID,也可以反过来在B上存A的ID,也可以互相存ID,这个是Doctrine 2里所说的关联方向。
    你问题例子里的是注解方式的,那我就说注解的:
    (1)单向,在A表上产生一个字段来存B的ID。

    /** @Entity **/
    class A
    {
        // ...
    
        /**
         * @OneToOne(targetEntity="B")
         * @JoinColumn(name="b_id", referencedColumnName="id")
         **/
        private $b;
    
        public function getB()
        {
            return $this->b;
        }
    }
    
    /** @Entity **/
    class B
    {
        // ...
    }

    在拿到A的情况下,可以用$a->getB()来获得与$a关联的B。

    joinColumn那一句,大多数情况是可以省略的,Doctrine 2会自动生成关联字段的名称。

    (1)双向

    /** @Entity **/
    class A
    {
        // ...
    
        /**
         * @OneToOne(targetEntity="B", mappedBy="a")
         **/
        private $b;
    
        public function getB()
        {
            return $this->b;
        }
    }
    
    /** @Entity **/
    class B
    {
        // ...
    
        /**
         * @OneToOne(targetEntity="A", inversedBy="b")
         **/
        private $a;
    
        public function getA()
        {
            return $this->a;
        }
    }

    $a->getB()和$b->getA(),都可以直接取关联对象。

    targetEntity(关联哪个对象/表)里多了一个mappedBy和inversedBy,他们的值,其实就是被关联对象上用来保存关联ID的属性的名字。

    标记了mappedBy的,将成为关联关系的“拥有者”。

    2019-07-17 19:37:13
    赞同 展开评论
问答地址: