0
나는 교리 관계 매핑과 관련된 명백한 부분을 놓치고 있다고 생각합니다.Doctrine2 간단한 관계
마이크로 사이트 및 페이지 (1 : 많은 페이지는 하나의 사이트에만 속함)의 두 가지 모델이 있습니다.
/*
...
* @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)
하지만이기구가 제대로로드 할 수 없습니다 (나는 그들이 작업을했지만, 그렇다하더라도 나는 당 관련 페이지를 가져올 수 없습니다 사이트 :
내 질문과 대답 :이 특수 효과는 정확하며 데이터를 올바르게 추가하고 특정 사이트에서 페이지를 검색하는 방법은 무엇입니까?
,363,210설비는 다음과 같습니다
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();
}
}
, 감사 :
당신은 다음이 방법을 사용합니다. 상위 모델에서 페이지 생성이 필요하거나 조언을 받았습니까? – Adam
전혀 필요하지 않습니다, 그건 제 개인 모범 사례입니다 :-) – Benjamin