2012-10-02 5 views
4

필자는 구현하고자하는 공통적 인 사용 사례가 있지만 Symfony Sonata Admin Bundle (ORM)과 관련된 몇 가지 문제에 부딪치고 있습니다. 내 모델은 시설, 스포츠, 시설 및 스포츠 시설의 세 가지 항목을 기반으로 한 스포츠와의 관계가 있습니다. 나는 예제를 따르고 다음 클래스 (관련 부분 만)에 정의되어 있습니다. 내 FacilityAdmin 클래스에서일대 다 관계에 sonata_type_collection을 사용할 때의 문제

class Sport { 
    /** 
    * Bidirectional - Many facilies are related to one sport 
    * 
    * @ORM\OneToMany(targetEntity="SportsFacility", mappedBy="sport") 
    */ 
    protected $facilities; 
    public function getFacilities() { 
     return $this->facilities; 
    } 

    public function setFacilities($facilities) { 
     $this->facilities = $facilities; 
     return $this; 
    } 
} 

class Facility { 
    /** 
    * Bidirectional - Many sports are related to one facility 
    * 
    * @ORM\OneToMany(targetEntity="SportsFacility", mappedBy="facility") 
    */ 
    protected $sports; 
    public function getSports() { 
     return $this->sports; 
    } 

    public function setSports($sportsFacilities) { 
     $this->sports = $sportsFacilities; 
     return $this; 
    } 

    public function addSports($sportsFacilities) { 
     $this->sports = $sportsFacilities; 
     return $this; 
    } 
} 

class SportsFacility { 
    /** 
    * @var integer $sportsFacilityId 
    * 
    * @ORM\Column(name="sportsFacilityId", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $sportsFacilityId; 

    /** 
    * Bidirectional - Many Sports are related to one Facility (OWNING SIDE) 
    * 
    * @ORM\ManyToOne(targetEntity="Sport", inversedBy="facilities")) 
    * @ORM\JoinColumn(name="sportId", referencedColumnName="sportId")) 

    */ 
    protected $sport; 
    /** 
    * Bidirectional - Many Facilities are related to one Sport (OWNING SIDE) 
    * 
    * @ORM\ManyToOne(targetEntity="Facility", inversedBy="sports")) 
    * @ORM\JoinColumn(name="facilityId", referencedColumnName="facilityId")) 
    */ 
    protected $facility; 

    public function getSportsFacilityId() { 
     return $this->sportsFacilityId; 
    } 

    public function setSportsFacilityId($sportsFacilityId) { 
     $this->sportsFacilityId = $sportsFacilityId; 
     return $this; 
    } 

    public function getSport() { 
     return $this->sport; 
    } 

    public function setSport($sport) { 
     $this->sport = $sport; 
     return $this; 
    } 

    public function getFacility() { 
     return $this->facility; 
    } 

    public function setFacility($facility) { 
     $this->facility = $facility; 
     return $this; 
    } 
} 

내가 가진 :

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name') 
     ->with('Sports') 
      ->add('sports', 'sonata_type_collection', 
       array('by_reference' => false), 
       array(
        'edit' => 'inline', 
        'inline' => 'table', 
       )) 
     ->end(); 
} 

나는 새로운 관계를 추가하려고, 나는 다음과 같은 오류 얻을 : 유형 "배열 또는 \에 이동"의 예상 인수를, "명확성을 \ CoachTimeBundle \ Entity \ SportsFacility "vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Form/EventListener/ResizeFormListener.php 줄 88에서 제공"

+0

가에 대해 당신에게 확신 진화하지 않았다 sportsFacility 클래스의 주석에 @ORM \ ManyToOne (targetEntity = "Sport", inversedBy = "facilities"))을 닫습니까? – Thomas

+0

이 문제도 있습니다 (그러나 관계 엔티티에 is_active를 추가했습니다). 나는 많은 사람들이이 [일종의 해결책] (https://github.com/sonata-project/SonataDoctrineORMAdminBundle/issues/145)을 사용하는 것을 보았다. (부분적으로는 내 상황에서) – DEY

+0

문제? 비슷한 문제가 있습니다. http://stackoverflow.com/questions/15629225/symfony2-1m-11-relationship-and-sonata-admin-form –

답변

3

마지막으로 문제가있는 곳에서 발견되었습니다. 수업 시설에 당신이 소나타에 대한 누락 된 방법을 추가,하지만 당신이 (응 응)가해야 할 생각하지 말아야 :

내가 addSport() 가정
class Facility { 
    ... 
    /** 
    * Alias for sonata 
    */ 
    public function addSports($sportFacility) { 
     return $this->addSport($sportFacility); 
    } 
} 

는 새로운 인스턴스를 추가 할 수있는 기본 교리 생성 방법 컬렉션에 SportsFacility

이 소나타는 교리가 어떻게 다른 새로운 개체를 추가 할 수있는 방법을 생성하는 방법에 기인한다 :

//file: Sonata/AdminBundle/Admin/AdminHelper.php 
public function addNewInstance($object, FieldDescriptionInterface $fieldDescription) 
{ 
    ... 
    $method = sprintf('add%s', $this->camelize($mapping['fieldName'])); 
    ... 
} 

누군가가 the same problem 가지고 있지만, 문서

관련 문제