Istnieje sobie taka tabela #payments z poniższą zawartością:
  1. Id Name
  2. 1 Płatność
  3. 2 Płatność przelewem z góry
  4. 3 Płatność przelewem z góry
  5. 4 Płatność za pobraniem
  6. 5 Płatność gotówką
  7. 6 Płatność przelewem z góry


Pytanie:
W jaki sposób zrobić selecta w formsie za pomocą query building, aby pokazał wszystkie dane, pomijając powtarzające się wartości z kolumny "Name"?

Próbuje w ten sposób:
  1. class OrdersType extends AbstractType
  2. {
  3. /**
  4.   * @param FormBuilderInterface $builder
  5.   * @param array $options
  6.   */
  7. public function buildForm(FormBuilderInterface $builder, array $options)
  8. {
  9. $builder
  10. ...
  11. ->add('orderPayment', 'entity', array('label'=>'Płatności', 'class' => 'MlBackendBundle:Payments
  12. 'query_builder' => function (\Doctrine\ORM\EntityRepository $r)
  13. {
  14. $queryBuilder = $r->createQueryBuilder('c');
  15. $query = $queryBuilder
  16. ->where($queryBuilder->expr()-> .... ('c.name')) // tutaj sie zacialem
  17. ;
  18.  
  19. return $query;
  20. }
  21. ))
  22. ->add('orderShipment')
  23. ...
  24. ;
  25. }


Moja encja z płatnościami wygląda mniej więcej tak:
  1. /**
  2.  * Payments
  3.  *
  4.  * @ORM\Table()
  5.  * @ORM\Entity
  6.  */
  7. class Payments
  8. {
  9. /**
  10.   * @var integer
  11.   *
  12.   * @ORM\Column(name="id", type="integer")
  13.   * @ORM\Id
  14.   * @ORM\GeneratedValue(strategy="AUTO")
  15.   */
  16. private $id;
  17.  
  18. /**
  19.   * @var string
  20.   *
  21.   * @Assert\NotBlank()
  22.   * @ORM\Column(name="name", type="string", length=255)
  23.   */
  24. private $name;
  25.  
  26. /**
  27.   * @var string
  28.   *
  29.   * @ORM\Column(name="description", type="string", length=255, nullable=true)
  30.   */
  31. private $description;
  32.  
  33. /**
  34.   * @var string
  35.   *
  36.   * @ORM\Column(name="summary_description", type="text", nullable=true)
  37.   */
  38. private $summaryDescription;
  39.  
  40. /**
  41.   * @var boolean
  42.   *
  43.   * @ORM\Column(name="is_active", type="boolean", options={"default":1})
  44.   */
  45. private $isActive;
  46.  
  47. /**
  48.   * @ORM\OneToMany(targetEntity = "Orders", mappedBy = "orderPayment")
  49.   *
  50.   */
  51. protected $orders;
  52.  
  53. /**
  54.   * @Assert\NotBlank()
  55.   * @ORM\ManyToOne(targetEntity="Ml\FrontendBundle\Entity\Shipments", inversedBy="payments", cascade={"persist"})
  56.   * @ORM\JoinColumn(name="shipment_id", referencedColumnName="id", nullable=false)
  57.   **/
  58. protected $shipments;
  59.  
  60. public function __toString() {
  61. return $this->name;
  62. }
  63.  
  64. /**
  65.   * Constructor
  66.   */
  67. public function __construct()
  68. {
  69. $this->orders = new \Doctrine\Common\Collections\ArrayCollection();
  70. }
  71. ...
  72. }


  1. /**
  2.  * Orders
  3.  *
  4.  * @ORM\Table()
  5.  * @ORM\Entity(repositoryClass="Ml\BackendBundle\Entity\OrdersRepository")
  6.  */
  7. class Orders
  8. {
  9. /**
  10.   * @var integer
  11.   *
  12.   * @ORM\Column(name="id", type="integer")
  13.   * @ORM\Id
  14.   * @ORM\GeneratedValue(strategy="AUTO")
  15.   */
  16. private $id;
  17.  
  18. /**
  19.   * @Assert\NotBlank
  20.   * @ORM\ManyToOne(targetEntity="Ml\UserBundle\Entity\User", inversedBy="orders")
  21.   * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
  22.   *
  23.   */
  24. protected $user;
  25.  
  26. /**
  27.   * @Assert\NotBlank
  28.   * @ORM\ManyToOne(targetEntity="Payments", inversedBy="orders")
  29.   * @ORM\JoinColumn(name="order_payment_id", referencedColumnName="id", nullable=false)
  30.   *
  31.   */
  32. protected $orderPayment;
  33.  
  34. /**
  35.   * @Assert\NotBlank
  36.   * @ORM\ManyToOne(targetEntity="Shipments", inversedBy="orders")
  37.   * @ORM\JoinColumn(name="order_shipment_id", referencedColumnName="id", nullable=false)
  38.   *
  39.   */
  40. protected $orderShipment;
  41. ...
  42. }


Prosze o jakas wskazowke.