doucheng1063 2016-03-18 09:35 采纳率: 100%
浏览 60
已采纳

Symfony:按实体关系排序实体类型表

I want to make a select form in symfony where entrie are ordered by relation (I have Client entity with a Many to one relation). The form should order each Client by Enterprise.

Here is my Client Entity

/**
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="MyBrowserBundle\Entity\UserRepository")
 */
class User
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 *  @ORM\ManyToOne(targetEntity="MyBrowserBundle\Entity\Enterprise", inversedBy="user", cascade={"persist"})
 *  @ORM\JoinColumn(nullable=false)
 */
private $enterprise;

//Some data

// Setter Getter

/**
 * Set enterprise
 *
 * @param \MyBrowserBundle\Entity\Enterprise $enterprise
 * @return User
 */
public function setEnterprise(\MyBrowserBundle\Entity\Enterprise $enterprise)
{
    $this->enterprise = $enterprise;

    return $this;
}

/**
 * Get enterprise
 *
 * @return \MyBrowserBundle\Entity\Enterprise 
 */
public function getEnterprise()
{
    return $this->enterprise;
}
 public function __construct() {
   //Some code
}
}

And My Enterprise Entity

/**
 * @ORM\Table(name="enterprise")       *@ORM\Entity(repositoryClass="MyBrowserBundle\Repository\EnterpriseRepository")
 */
class Enterprise
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

/**
 * @ORM\OneToMany(targetEntity="MyBrowserBundle\Entity\User", mappedBy="enterprise", cascade={"persist"})
 */
private $user;
/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $name
 * @return Enterprise
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

/**
 * Get name
 *
 * @return string 
 */
public function getName()
{
    return $this->name;
}
/**
 * Constructor
 */
public function __construct()
{
    $this->user = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add user
 *
 * @param \MyBrowserBundle\Entity\User $user
 * @return Enterprise
 */
public function addUser(\MyBrowserBundle\Entity\User $user)
{
    $this->user[] = $user;
    //$user->setEnterprise($this);

    return $this;
}

/**
 * Remove user
 *
 * @param \MyBrowserBundle\Entity\User $user
 */
public function removeUser(\MyBrowserBundle\Entity\User $user)
{
    $this->user->removeElement($user);
}

/**
 * Get user
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getUser()
{
    return $this->user;
}
}

I am using a bidimensional array with a Choice Type like this ($fullArray is the 2d array) :

$formSearch = $this->createFormBuilder($fullArray)
                ->add('List', 'choice', array(
                    'choices' => $fullArray,
                    'choice_attr' => function($fullArray, $key, $index) {
                        return ['class' => 'category_'.$key];   
                    },
                    ))
                        ->add('search', 'submit')
                        ->getForm();
    $formSearch->handleRequest($request);

The probleme is when twig render the form, all of the data are mixed.

Is there another way of doing this? (with EntityType ?) I am new to Symfony 2

Thanks

  • 写回答

1条回答 默认 最新

  • dongzhi6905 2016-03-18 10:15
    关注

    So, i have juste changer my formBuilder to this :

    $formSearch         = $this->createFormBuilder($fullArray)
                            ->add('user', 'entity', array(
                                'class' => 'MyBrowserBundle:User',
                                'choice_label' => 'name',
                                'query_builder' => function (EntityRepository $er) {
                                    return $er->createQueryBuilder('u')
                                        ->orderBy('u.enterprise', 'ASC');
                                },
                                'group_by' => function($val, $key, $index) {
                                    return $val->getEnterprise()->getName();
                                },
                                ))
                            ->add('search', 'submit')
                            ->getForm();
    

    And it work fine :)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试