5

私のプロジェクトには、次のエンティティ構造があります。

class MyEntity
{
 [... some more fields...]
 /**
 * @Type("array<string, string>")
 * @ORM\ManyToMany(targetEntity="Me\MyBundle\Entity\Example")
 * @ORM\JoinTable(name="example_myentity",
 *      joinColumns={@ORM\JoinColumn(name="plan_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="example", referencedColumnName="label")}
 * )
 */
private $example;
}



class Example
{

/**
 * @ORM\Id
 * @ORM\Column(name="label", type="string", length=50, unique=true, nullable=false)
 */
private $label;
}

Doctrine の findby() 関数を使用して "$example" を取得しようとすると、次の通知が表示されました。

未定義のインデックス: joinColumns

私はそれをデバッグしようとしましたが、問題は関数の教義ファイル BasicEntityPersister.php にあるようです

 _getSelectEntitiesSQL($criteria, $assoc = null, $lockMode = 0, $limit = null, $offset = null, array $orderBy = null),

スタック トレースで、2 番目のパラメーター "$assoc" が常に nullであることを確認しました。これが、Doctrine が JOIN ステートメントを作成しない理由だと思います。

何か案が?

ありがとう

4

1 に答える 1

4

これはバグだと思います。おそらくこれです。

私は同じ問題を抱えています.今のところ唯一の解決策は、BasicEntityPersisterの更新を待つか、かなり簡単なクエリを書くことです.

最初にリポジトリをクラスに追加します

/**
 * MyClass
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\MyClassRepository")
 */
class MyClass
...

次に、リポジトリクラスで:

class MyClassRepository extends EntityRepository
{
    public function findByExample( Example $example )
    {
         return $this->getEntityManager()
                ->createQueryBuilder()
                ->select('m')
                ->from('AcmeDemoBundle:MyClass', 'm')
                ->innerJoin('m.examples', 'e')
                ->where('e.id = :exampleid' )
                ->setParameter('exampleid', $example->getId() )
                ->getQuery()
                ->getResult();
    }
}

最後に、次のようにして、 Example に関連するすべての MyClass インスタンスを取得できます。

$this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:MyClass')->findByExample( $example );
于 2014-02-09T13:32:09.793 に答える