0

ユーザーとアカウント間の多対多の関係でクエリビルダーを使用して Symfony2 で再構築しようとしていますが、失敗しています。これがDQLです

return $er->createQueryBuilder('a')
->leftJoin('\FEB\UserBundle\Entity\Userr', 'u')
->where('a.id = :id')
->setParameter('id', $options['pepe']);

これはエンティティです:

user.php

namespace FEB\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="feb_user")
*/
class User extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

public function __construct()
{
    parent::__construct();
    // tu propia lógica
}
}

Account.php

namespace FEB\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Account
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="FEB\UserBundle\Entity\AccountRepository")
*/
class Account
{
    /**
    * @var integer
    *
    * @ORM\Column(name="id", type="integer")
     * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;

    /**
    * Many-To-Many, Unidirectional
    *
    * @var ArrayCollection $idusr
    *
    * @ORM\ManyToMany(targetEntity="\FEB\UserBundle\Entity\User")
    * @ORM\JoinTable(name="accounts_users",
    *      joinColumns={@ORM\JoinColumn(name="account_id", referencedColumnName="id")},
    *      inverseJoinColumns={@ORM\JoinColumn(name="usr_id", referencedColumnName="id")}
    * )
    */
    private $idusr;

    public function __construct() {
         $this->idusr = new \Doctrine\Common\Collections\ArrayCollection();
    }

/**
 * Set idusr
 *
 * @param string $idusr
 * @return Account
 */
public function setIdusr($idusr)
{
    $this->idusr = $idusr;

    return $this;
}

/**
 * Get idusr
 *
 * @return integer 
 */
public function getIdusr()
{
    return $this->idusr;
}

DQL を実行すると、結合ではなく「アカウント」テーブルのすべてのレコードが取得されました。

実行したい SQL ステートメントは次のようになります。

SELECT * 
FROM Account a
LEFT JOIN accounts_users au ON ( au.usr_id = a.id ) 
WHERE au.usr_id = 1

どうすれば修正できますか?

編集1:

アイデアは、結果を取得して、アカウント フォームのドロップダウンに入力することです。

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder->add('titulo')
            ->add('tweet', 'textarea')
            ->add('photo', 'file', array('required' => false))              
            ->add('tags', 'entity', array(
                                            'class' =>    'FEBTagsBundle:tag',
                                            'property' => 'tag',
                                            'empty_value' => 'Selecciona tags',
                                            'multiple' => true))
            ->add('idaccount', 'entity', array(
                                            'class' =>    'FEBUserBundle:Account',
                                            'property' => 'username',
                                            'query_builder' => function(EntityRepository $er ) use ($options) {
                                                return $er->createQueryBuilder('a')
                                                          ->leftJoin('\FEB\UserBundle\Entity\User', 'u')
                                                          ->where('a.id = :id')
                                                          ->setParameter('id', $options['pepe']);
                                                          //->andWhere('w.visible = 1')
                                                          //->andWhere('w.booked = 0');
                                            ;},
                                            'empty_value' => 'Selecciona account',
                                            'multiple' => false))                                               
                                            ;               
}

EDIT2:詳細。目標は次のとおりです。「feb_user」テーブルの ID から、「Account」テーブルのユーザー名を取得します。テーブル feb_user と Account テーブルは、「accounts_users」テーブルを介して関連付けられています。

4

2 に答える 2