Php Doctrine2简单关系

Php Doctrine2简单关系,php,doctrine,doctrine-orm,associations,fixtures,Php,Doctrine,Doctrine Orm,Associations,Fixtures,我想我在条令关系映射中遗漏了一些明显的东西 我有两个模型,微型站点和页面(一对多,页面只属于一个站点) /* ... *@ORM\Table() *@ORM\Entity(repositoryClass=“EP\PreReg\DataBundle\Entity\MicrositeRepository”) */ 类微站点 { /** *@var整数$id * *@ORM\Column(name=“id”,type=“integer”) *@ORM\Id *@ORM\GeneratedValue(s

我想我在条令关系映射中遗漏了一些明显的东西

我有两个模型,微型站点和页面(一对多,页面只属于一个站点)

/*
...
*@ORM\Table()
*@ORM\Entity(repositoryClass=“EP\PreReg\DataBundle\Entity\MicrositeRepository”)
*/
类微站点
{
/**
*@var整数$id
*
*@ORM\Column(name=“id”,type=“integer”)
*@ORM\Id
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
私人$id;
...
/**
*@ORM\OneToMany(targetEntity=“Page”,mappedBy=“site”)
*/
私人$pages;
公共函数构造(){
$this->pages=new\Doctrine\Common\Collections\ArrayCollection();
}
公共函数getPages(){
返回$this->pages;
}
公共函数addPage($page){
$this->pages[]=$page;
}
/*
*@ORM\Table()
*@ORM\Entity
*/
类页
{
/**
*@var整数$id
*
*@ORM\Column(name=“id”,type=“integer”)
*@ORM\Id
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
私人$id;
/**
*@var字符串$title
*
*@ORM\Column(name=“title”,type=“string”,length=255)
*/
私人产权;
/**
*@var字符串$slug
*
*@ORM\Column(name=“slug”,type=“string”,长度=100)
*/
私人$slug;
/**
*@ORM\manytone(targetEntity=“Microsite”,inversedBy=“pages”)
*/
私人网站;
架构看起来不错:

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();
    }
}

您需要在
页面
上设置
$site
属性。我建议您将页面创建委托给Microsite:

类微站点
{
// ...
公共函数addPage(){
$page=新页面($this);
$this->pages->add($page);
返回$page;
}
}
类页
{
// ...
公共功能建设(微型站点$site){
$this->site=$site;
}
}
然后您可以这样使用它:

$site=new Microsite();
$site->setName('Microsite Name');
$site->setShortCode('MIC');
$site->setSubdomain('micro');
$homepage=$site->addPage();
$homepage->setSlug('/');
$homepage->setTitle(“欢迎”);

很有效,谢谢。在父模型中创建页面是必需的还是建议的?根本不需要,这只是我个人的最佳实践:-)