我有两张表。
书桌
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'
我该怎么做?
答案 0 :(得分:1)
“In”必须括在括号中,因此它不是有效的语法。
更好的方法是在书籍和作者之间使用many to many bidirectional association。然后,您可以使用内部联接从结果中删除没有作者的任何书籍。
select a from AcmeTopBundle:AuthorData a JOIN a.books