使用IN连接多个属性并连接两个表

时间:2013-12-07 11:39:30

标签: symfony doctrine-orm

我有两张表。

书桌

class BookData
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 *
 * @ORM\ManyToMany(targetEntity="Acme\TopBundle\Entity\AuthorData")
 * @ORM\JoinColumn(name="authorId", referencedColumnName="authorId",onDelete="SET NULL")
 */

private $authorId;

作者表

class AuthorData
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\Column(type="string",unique=true,nullable=true)
 */
private $authorId;

一个图书行可以有多个$ authorID。

然后,我想选择至少有一本书的作者。

$query = $em->createQuery(
        "SELECT n.name FROM AcmeTopBundle:AuthorData a 
        INNER JOIN AcmeTopBundle:BookData b
        Where b.authorId IN b.authorId
            ");
然而,它说。

[Syntax Error] line 0, col 112: Error: Expected Doctrine\ORM\Query\Lexer::T_OPEN_PARENTHESIS, got 'a'

我该怎么做?

1 个答案:

答案 0 :(得分:1)

“In”必须括在括号中,因此它不是有效的语法。

更好的方法是在书籍和作者之间使用many to many bidirectional association。然后,您可以使用内部联接从结果中删除没有作者的任何书籍。

select a from AcmeTopBundle:AuthorData a JOIN a.books