Ho 3 soggetti:Symfony2 Form Builder selezione che Join Tavolo con metadati
[Member] ----OneToMany----> [MemberCategory] ---ManyToOne---> [Category]
Questo funziona risultati bene per quanto riguarda fetching dal database, ma non riesco a ottenere il Form Builder per costruire una forma corretta controlli.
Desidero un elenco di tutte le categorie con caselle di controllo controllate per le categorie utilizzate dal membro. Alla fine voglio aggiungere il campo prioritario.
Stati
class Member
{
protected $id;
@ORM\OneToMany(targetEntity="MemberCategory", mappedBy="member")
protected $categories;
}
Categoria
class Category
{
protected $id;
@ORM\Column(name="category_name", type="string", length=50, nullable=false, unique=true)
private $categoryName;
}
MemberCategory
class MemberCategory
{
@ORM\Id
@ORM\ManyToOne(targetEntity="Member")
@ORM\JoinColumns({
@ORM\JoinColumn(name="member_id", referencedColumnName="id", onDelete="CASCADE")
private $member;
@ORM\Id
@ORM\ManyToOne(targetEntity="Category")
@ORM\JoinColumns({
@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")
private $category;
@ORM\Column(name="priority", type="integer", nullable=true)
protected $priority;
}
att Obvious empts con il form builder che non funziona.
se uso:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:Category',
'property' => 'categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
ottengo una select con tutte le categorie, ma nessuno di quelli selezionati in MemberCategory per questo utente.
se uso:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:MemberCategory',
'property' => 'category.categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
ricevo tutte le categorie selezionate per tutti gli utenti.
Qualcuno sa come farlo funzionare, questo è un modello comune ovvio nei dati relazionali e sarebbe facile utilizzando SQL e PHP.
C'è una soluzione semplice in Symfony 2.3 e Doctrine?
Si prega di completare la vostra rispondi, poiché la parte principale è commentata nella tua risposta – Trix