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

WBOY
Release: 2016-06-06 20:50:13
Original
931 people have browsed it

<code class="lang-php">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;


}
</code>
Copy after login
Copy after login

回复内容:

<code class="lang-php">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;


}
</code>
Copy after login
Copy after login

友情提示:Doctrine 2的Mapping信息(映射信息)可以用XML,YAML,PHP和注解这四种格式来编写。

A和B的一对一关系,在数据库里,可以在A上弄个字段存相应B记录的ID,也可以反过来在B上存A的ID,也可以互相存ID,这个是Doctrine 2里所说的关联方向。

你问题例子里的是注解方式的,那我就说注解的:

(1)单向,在A表上产生一个字段来存B的ID。

<code class="lang-php">/** @Entity **/
class A
{
    // ...

    /**
     * @OneToOne(targetEntity="B")
     * @JoinColumn(name="b_id", referencedColumnName="id")
     **/
    private $b;

    public function getB()
    {
        return $this->b;
    }
}

/** @Entity **/
class B
{
    // ...
}
</code>
Copy after login

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

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

(1)双向

<code class="lang-php">/** @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;
    }
}
</code>
Copy after login

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

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

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template