2

再帰カテゴリの簡単な表があります。

id
name
parent_id - is a link to id, NULL - for root categories

外部キーを使用してテーブルを作成する必要があります。私のクラスはこのキーを作成しません。このクラスを変更して、「doctrine:schema:create」を使用して外部キーを持つテーブルを作成するにはどうすればよいですか?私が試したこと:

<?php
namespace Test\BackEndBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="category")
 */
class Category
{
    /**
     * @ORM\Id
     * @ORM\Column(type="bigint", length=20)
     * @ORM\GeneratedValue(strategy="AUTO")
     * @var int
     */
    protected $id;

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

    /**
     * @ORM\Column(name="parent_id", type="bigint", length=20, nullable="true")
     * @ORM\OneToMany(targetEntity="Category")
     * @ORM\JoinColumn(name="id", onDelete="CASCADE", onUpdate="CASCADE")
     * @var int
     */
    protected $parentId;

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

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

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
}
4

1 に答える 1

7

あなたはManyToOneでOneToManyを逆転させました!

ここを参照してください:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#one-to-many-self-referencing

実際、複数のサブカテゴリに1匹の親猫を含めることができます。

何が必要:

/**
 * @OneToMany(targetEntity="Category", mappedBy="parent")
 */
private $children;

/**
 * @ManyToOne(targetEntity="Category", inversedBy="children")
 * @JoinColumn(name="parent_id", referencedColumnName="id")
 */
private $parent;
// ...

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

$parentを$parentIdに(およびmappedBy ="parent"をmappedBy="parentId"に)置き換えることができますが、これは適切なコーディング規約ではありません^^

于 2012-09-04T11:32:49.730 に答える