Istnieje sobie taka tabela #payments z poniższą zawartością:
Id Name
1 Płatność
2 Płatność przelewem z góry
3 Płatność przelewem z góry
4 Płatność za pobraniem
5 Płatność gotówką
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:
class OrdersType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder
...
->add('orderPayment', 'entity', array('label'=>'Płatności', 'class' => 'MlBackendBundle:Payments 'query_builder' => function (\Doctrine\ORM\EntityRepository $r)
{
$queryBuilder = $r->createQueryBuilder('c');
$query = $queryBuilder
->where($queryBuilder->expr()-> .... ('c.name')) // tutaj sie zacialem
;
return $query;
}
))
->add('orderShipment')
...
;
}
Moja encja z płatnościami wygląda mniej więcej tak:
/**
* Payments
*
* @ORM\Table()
* @ORM\Entity
*/
class Payments
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255, nullable=true)
*/
private $description;
/**
* @var string
*
* @ORM\Column(name="summary_description", type="text", nullable=true)
*/
private $summaryDescription;
/**
* @var boolean
*
* @ORM\Column(name="is_active", type="boolean", options={"default":1})
*/
private $isActive;
/**
* @ORM\OneToMany(targetEntity = "Orders", mappedBy = "orderPayment")
*
*/
protected $orders;
/**
* @Assert\NotBlank()
* @ORM\ManyToOne(targetEntity="Ml\FrontendBundle\Entity\Shipments", inversedBy="payments", cascade={"persist"})
* @ORM\JoinColumn(name="shipment_id", referencedColumnName="id", nullable=false)
**/
protected $shipments;
public function __toString() {
return $this->name;
}
/**
* Constructor
*/
public function __construct()
{
$this->orders = new \Doctrine\Common\Collections\ArrayCollection();
}
...
}
/**
* Orders
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Ml\BackendBundle\Entity\OrdersRepository")
*/
class Orders
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Ml\UserBundle\Entity\User", inversedBy="orders")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*
*/
protected $user;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Payments", inversedBy="orders")
* @ORM\JoinColumn(name="order_payment_id", referencedColumnName="id", nullable=false)
*
*/
protected $orderPayment;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Shipments", inversedBy="orders")
* @ORM\JoinColumn(name="order_shipment_id", referencedColumnName="id", nullable=false)
*
*/
protected $orderShipment;
...
}
Prosze o jakas wskazowke.