簡體   English   中英

教義2簡單關系

[英]Doctrine2 Simple Relation

我認為我在教義關系映射方面缺少明顯的東西。

我有兩種模型,微型站點和頁面(一對多,頁面僅屬於一個站點)。

/*
 ...

 * @ORM\Table()
 * @ORM\Entity(repositoryClass="EP\PreReg\DataBundle\Entity\MicrositeRepository")
 */
class Microsite
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    ...

    /**
     * @ORM\OneToMany(targetEntity="Page", mappedBy="site")
     */
    private $pages;


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

    public function getPages() {
        return $this->pages;
    }

    public function addPage($page) {
        $this->pages[] = $page;
    }
/*
 * @ORM\Table()
 * @ORM\Entity
 */
class Page
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var string $slug
     *
     * @ORM\Column(name="slug", type="string", length=100)
     */
    private $slug;

    /**
     * @ORM\ManyToOne(targetEntity="Microsite", inversedBy="pages")
     */
    private $site;

模式看起來不錯:

CREATE TABLE Page (id INT AUTO_INCREMENT NOT NULL, site_id INT DEFAULT NULL, title VARCHAR(255) NOT NULL, slug VARCHAR(100) NOT NULL, INDEX IDX_B438191EF6BD1646 (site_id), PRIMARY KEY(id)) ENGINE = InnoDB;

CREATE TABLE Microsite (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, shortCode VARCHAR(20) NOT NULL, subdomain VARCHAR(100) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;

ALTER TABLE Page ADD CONSTRAINT FK_B438191EF6BD1646 FOREIGN KEY (site_id) REFERENCES Microsite(id)

但是我無法使燈具正確加載(我可以使燈具正常工作,但是即使那樣,我也無法獲得每個站點的相關頁面。

我的問題是:這些批注是否正確?如何正確添加數據並從給定站點檢索頁面?

治具是:

class LoadMicrositeData implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {

        $site = new Microsite();
        $site->setName('Microsite Name');
        $site->setShortCode('MIC');
        $site->setSubdomain('micro');

        $homepage = new Page();
        $homepage->setSlug('/');
        $homepage->setTitle('Welcome');

        $site->addPage($homepage);

        $manager->persist($site);
        $manager->persist($homepage);

        $manager->flush();
    }
}

您需要在Page上設置$site屬性。 我建議您將頁面的創建委托給微網站:

class Microsite
{
    // ...

    public function addPage() {
        $page = new Page($this);
        $this->pages->add($page);
        return $page;
    }
}

class Page
{
    // ...

    public function __construct(Microsite $site) {
        $this->site = $site;
    }
}

然后,您將以這種方式使用它:

$site = new Microsite();
$site->setName('Microsite Name');
$site->setShortCode('MIC');
$site->setSubdomain('micro');

$homepage = $site->addPage();
$homepage->setSlug('/');
$homepage->setTitle('Welcome');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM