2016-07-22 1 views
2

두 개의 ManyToMany 관련 엔티티, 즉 categorytag으로 작업하고 있습니다.속성 경로 "tagname"의 값을 변환 할 수 없습니다. Doctrine Common Collections Collection 객체가 필요합니다.

엔티티 Tag (관련 세부 사항) :

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

/** 
* @ORM\ManyToMany(targetEntity="Category", mappedBy="tags") 
*/ 
protected $categories; 

엔티티 카테고리 (관련 세부 사항) :

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

/** 
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="categories") 
*/ 
protected $tags; 

나는 선택 입력 (카테고리 유형)을 선택 다중와 형태가 -input (TagType) 필드. 두 필드는 모두 EntityType 필드입니다. TagType은 CatgoryType 내에 내장되어 있습니다.

이 경우 나는 cascade=persist 기능을 사용할 수없고 제출 된 태그를 내 컨트롤러에 수동으로 추가 할 수 없습니다. 제출시 양식 데이터는 아무런 문제없이 데이터베이스에 보관됩니다. 페치의 Unable to transform value for property path "tagname": Expected a Doctrine\Common\Collections\Collection object.

위해서 var_dump 결과 - 나는 내 컨트롤러에 제출 된 카테고리 (및 관련 태그)를 가져, 양식에 전달할 때

문제는 제출 후,이 오류가 발생한다 category 객체 (var_dump($category->getTags()->getValues());)는 관련된 태그 객체의 배열을 제공하고 속성은 protected 'tagname' => string 'tag1'입니다.

Interface Collection은 PHP 배열과 매우 흡사하며 내 생각에 tagname 필드는 ArrayCollection 또는 Collection 개체 형식의 모든 tagname을 필요로합니다. 구체적인 차이점이 무엇인지 확실하지 않습니다.

그러나 아직 내 양식에 이미 보존 된 범주 개체를 어떻게 전달합니까? 여기

CategoryTypecategorynametags 필드입니다 : 여기

$builder->add('categoryname', EntityType::class, array(
     'class' => 'AppBundle:Category', 
     'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('c') 
      ->orderBy('c.id', 'ASC'); 
}, 
     'choice_label' => 'categoryname', 
     'expanded' => false, 
     'multiple' => false, 
     'label' => 'Choose Category', 
    )); 
    $builder->add('tags', CollectionType::class, array(
     'entry_type' => TagType::class, 
     'allow_add' => true, 
     'by_reference' => false, 
     'allow_delete' => true, 
    )); 

TagType에 포함 된 tagname 필드 :

$builder->add('tagname', EntityType::class, array(
     'class' => 'AppBundle:Tag', 
     'query_builder' => function(EntityRepository $er) { 
    return $er->createQueryBuilder('t') 
        ->orderBy('t.id', 'ASC'); 
}, 
     'choice_label' => 'tagname', 
     'expanded' => false, 
     'multiple' => true, 
     'label' => 'Choose Tags', 
    )); 

어떤 아이디어가? 이 문자열의, 당신의 Tag 엔티티에 따르면

$builder->add('tagname', EntityType::class, array() 

, Tag::$tagname 엔티티 수집되지 않습니다 :

+3

어떻게 해결 했습니까? –

답변

0

던져 예외는 꽤 명시 적이며, 문제는 아마 여기에있다. 속성을

$builder->add('tagname', TextType::class, array() 

으로 추가해야합니까?

+1

입력 해 주셔서 감사합니다. 그러나 ChoiceType을 사용하여 여러 입력 선택 필드를 만들어야합니다. 따라서 TextType을 사용하는 것이 문제의 정답이 아닙니다. – utkarsh2k2

0

'multiple' => true을 포함 된 형태로 없애 봅니다. 이것은 나를 위해 일했다.

관련 문제