2013-11-20 5 views
1

zend2 양식에 문제가 있습니다. 이 코드 아래 은 zend2에 문자열 값을 반환해야합니다. 방법?

class Campaigns 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */ 
    protected $id; 

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

    /** 
    * @var mixed 
    * 
    * @ORM\ManyToMany(targetEntity="Application\Entity\Countries", cascade={"persist"}, orphanRemoval=false) 
    * @ORM\JoinTable(name="campaigns_countries", 
    *  joinColumns={@ORM\JoinColumn(name="campaign_id", referencedColumnName="id", onDelete="CASCADE")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="country_id", referencedColumnName="id", onDelete="CASCADE")} 
    *  ) 
    */ 
    protected $countries; 

는 getter 및 setter하는 구조의 기능을 추가하고있다 : 나는 데이터베이스에서 일부 데이터를 가져 와서 일부 테이블을 조인하는 엔티티 ... 여기

가 실체를 만들어 제거 함수. 여기

그들은 다음과 같습니다

public function getId() 
    { 
     return $this->id; 
    } 

    public function setId($id) 
    { 
     $this->id = $id; 
     return $this; 
    } 

    public function getCampaigns() 
    { 
     return $this->campaigns; 
    } 

    public function setCampaigns($campaigns) 
    { 
     $this->campaigns = $campaigns; 
     return $this; 
    } 



    public function addCampaigns($campaigns = null) 
    { 
     foreach ($campaigns as $c) { 
      if (!$this->campaigns->contains($c)) { 
       $this->campaigns->add($c); 
      } 
     } 
    } 

    public function removeCampaigns($campaigns) 
    { 
     foreach ($campaigns as $c) { 
      if ($this->campaigns->contains($c)) { 
       $this->campaigns->removeElement($c); 
      } 
     } 
    } 
    public function getCountries() 
    { 
     return $this->countries; 
    } 

    public function setCountries($countries) 
    { 
     $this->countries = $countries; 
     return $this; 
    } 

    public function addCountries($countries = null) 
    { 
     foreach ($countries as $c) { 
      if (!$this->countries->contains($c)) { 
       $this->countries->add($c); 
      } 
     } 
    } 

    public function removeCountries($countries) 
    { 
     foreach ($countries as $c) { 
      if ($this->countries->contains($c)) { 
       $this->countries->removeElement($c); 
      } 
     } 
    } //construct for countries 
    public function __construct() 
    { 
     $this->setCountries(new ArrayCollection()); 
    } 

내 문제는 protected $countries 함께. 양식에 속성 값을 추가하면 엔터티에없는 "국가"속성이 표시됩니다.

내가 추가하고, 대신 __toString() 기능을 사용하지 않을 경우, 그것은 나에게 나는 다음과 같은 코드를 추가는 __toString() 기능에 ... 문자열로 국가를 변환 할 수 없다는 오류 제공 :

public function __toString() 
{ 

return $this->countries; 

} 

도와 주셔서 감사합니다!

AE

+1

원하는 것은 무엇입니까? 국가 선택 요소? 캠페인에 관련된 모든 국가의 목록? 또한,'__toString'은 분명히 ** 문자열 **을 반환해야합니다! –

+1

캠페인의 모든 관련 국가 목록은 내가 원하는 것입니다. 응답 해 주셔서 감사합니다. –

답변

1

관련 국가가 모두 포함 된 문자열이 필요하다고 말합니다. 다음 코드는이를 달성하는 방법을 보여줍니다.

$campaignCountryNames = array(); 

$campaignCountries = $campaign->getCountries(); 

foreach ($campaignCountries as $country) { 
    // I assume your Country entity has a name property 
    $campaignCountryNames[] = $country->getName(); 
} 

echo implode(', ', $campaignCountryNames); 
+1

고마워요! 위대한 작품! –