저는 Zend Framework 2와 Doctrine 2에 새로운 것이므로 내 문제를 검색하거나 디버깅하는 방법조차 모릅니다.Doctrine 2 : 양식 필드에 Doctrine Common Collections ArrayCollection @ 00이 값으로 표시됩니다.
나는 3 개 데이터베이스 테이블
1. 고라
ID
adverttitle ...
2. 카테고리
ID
범주 을 ...이
3. advert_category
advert_id 내가 2 엔티티, 고라와 카테고리를 만들었습니다
CATEGORY_ID. 선택할 수있는 범주를 표시하는 양식이 생겼습니다. jQuery를 사용하여 선택 가능한 기능과 함께 드롭 다운 대신 목록을 범주로 표시합니다. 따라서 카테고리를 클릭하면이 list 요소의 값이 카테고리라는 숨겨진 입력 필드에 입력됩니다. 내가 양식을 표시 할 때 즉, 숨겨진 카테고리 입력 필드 000000000 ..... 대신 비어있는 @교리 \ 공통 \ 모음 \있는 ArrayCollection의 값을 가지고 외에
모든 것이 잘 작동합니다. 여기서 내가 뭘 잘못하고 있니? 나는 해결책을 찾으려고했지만 실패했다.
결국 ManyToMany 관계를 선택 했으므로 결국 1 개 이상의 카테고리를 저장할 수 있기를 원합니다. 현재는 1로만 작동하지만 나중에이 값을 변경할 수 있어야합니다.
여기 내 고라 엔티티 :
namespace Advert\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use DateTime;
/** Advert
*
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="Advert\Repository\AdvertRepository")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="advert_title", type="string", length=255, nullable=true)
*/
private $advertTitle;
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="adverts", cascade={"persist"})
* @ORM\JoinTable(name="advert2category")
*/
private $categories;
public function __construct()
{
$this->categories = new ArrayCollection();
}
/**
* Set categories
*
* @param ArrayCollection $category
* @return Advert
*/
public function setCategories($categories)
{
$this->categories = $categories;
return $this;
}
/**
* Get categories
*
* @return ArrayCollection
*/
public function getCategories()
{
return $this->categories;
}
/**
* @param Collection $categories
*/
public function addCategories($categories)
{
foreach ($categories as $category) {
$this->categories->add($category);
}
}
/**
* @param Collection $categories
*/
public function removeCategories($categories)
{
foreach($categories as $category){
$this->categories->removeElement($category);
}
}
이 원인이되는 고라 엔티티에 오류가 있습니까? 누군가가 도울 수 있기를 바랍니다. 나는이 문제가 주 이후로 제대로 작동하지 않습니다.
업데이트 - 형태
아래의 양식 표시 2 개 드롭 다운 요소와 2 숨겨진 입력 필드를 호출 제어기 내에서 형태 및 부품을 추가했다. 2 개의 드롭 다운 필드는 jQuery를 통해 선택 가능한 목록으로 변환됩니다. Maincategory에서 List Element를 클릭하면 선택한 Maincategory에 대한 Subcategory가 다시 선택 가능한 목록으로 표시됩니다. MaincategoryID는 숨겨진 categoryID 필드에 입력됩니다. 목록에서 하위 카테고리를 선택하면 해당 카테고리의 ID가 숨겨진 카테고리 필드에 작성됩니다. "다음"버튼을 클릭하면 $ _POST [ 'categories']의 값을 내 연결 테이블에 advertID와 함께 저장합니다. 양방향 관계가 사용하는 테이블을 조인하지 않습니다
$sl = $this->getServiceLocator();
$form = $sl->get('FormElementManager')->get('\Advert\Form\CreateForm');
# create a new, empty entity
$advert = new Advert();
# set the hydrator to connect form and entity
$form->setHydrator(new DoctrineHydrator($this->getEntityManager(),'Advert\Entity\Advert'));
# connect form and entity
$form->bind($advert);
자세한 답변을 주셔서 감사합니다. addCategories와 removecategories는 이미 포함되어 있었고, 내 질문에는 중요하지 않다고 생각하여 위의 내용을 그대로 두었습니다. 이제 나타납니다. 양방향 관계가 조인 테이블을 사용하지 않는다는 사실에 놀랐습니다. 왜냐하면이 모든 것을 인터넷에서 보았 기 때문에 좀 더 자세하게 살펴 보겠습니다. 게시물에 내 양식을 추가 했으므로 여기에 오류가 있다고 가정합니다. 그러나 어디에서 볼 수 없습니다. 어쩌면 그것을 볼 수 있을까요? 귀하의 권고 사항을 이해하고 변경을 시도 할 것입니다. – Luka
분명히 나는 카테고리 필드 세트를 개별 클래스로 분리 할 것입니다. 카테고리 필드 세트에'id' 요소가 있고 AdvertForm에'categories' 컬렉션이 있어야하기 때문에'AdvertForm'에 'categoryID'숨겨진 요소를 추가 할 필요가 없습니다. SubCategories 문제는 또한 AdvertForm이 아닌 Category fieldset에서 처리해야한다고 생각합니다. – edigu