Piotr
Krajewski
web application
programmer
Temat: formularz dodawania + relacja manyToMany
Witam,mam problem - staram sie zrobic formularz dodawania wpisu, który zawiera pole manyToMany z inną tablą. Niestety non stop mi to nie wychodzi.
Poniżej kod:
Entity Attraction
<?php
namespace Explore\SiteBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
/**
* Explore\SiteBundle\Entity\Attraction
*
* @ORM\Table(name="attractions")
* @ORM\Entity(repositoryClass="Explore\SiteBundle\Repository\AttractionRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Attraction
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer $category_id
* Relacja Category (1) : (n) Attraction - tworzy kolumne category_id - id kategori ktora nalezy do atrakcji
*
* @ORM\Column(name="category_id", type="integer")
* @ORM\OneToMany(targetEntity="Category", mappedBy="attractions")
*/
private $category_id;
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="attraction")
* @ORM\JoinTable(name="attraction_tags",
* joinColumns={@ORM\JoinColumn(name="attraction_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
public function getId(){
return $this->id;
}
public function getTags(){
return $this->tags;
}
}
Entity Tag:
<?php
namespace Explore\SiteBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Explore\SiteBundle\Entity\Tag
*
* @ORM\Table(name="tags")
* @ORM\Entity
*/
class Tag
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $tag
*
* @ORM\Column(name="tag", type="string", length=100)
*/
private $tag;
/**
* @ORM\ManyToMany(targetEntity="Attraction", mappedBy="tags")
*/
private $attraction;
public function __construct(){
$this->attraction = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getId(){
return $this->id;
}
public function setTag($tag){
$this->tag = $tag;
}
public function getTag(){
return $this->tag;
}
}
Form:
<?php
namespace Explore\UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class AttractionType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options){
$builder->add('category_id', 'choice', array('choices' => array(1 => '1'), 'label' => 'Kategoria:'));
$builder->add('tags', 'text', array('label' => 'Tagi:'));
}
public function getName(){
return 'attraction';
}
}
Moje pytanie brzmi - jak dodac wpis "tags" do tabeli posredniej - "attraction_tags" w ktorej bedzie identyfikacja tabeli attractions i tabeli tags?
Poki co dostaje bledy typu:
Property "tags" is not public in class "Explore\SiteBundle\Entity\Attraction". Maybe you should create the method "setTags()"?
wiem ze nie mam takiej metody ale nie wiem czy powinienem ja stworzyc i tam zrobic inserta do tabeli attraction_tags czy w inny sposob ?