有多个连接的查询生成器的例外

问题描述:

我试图用多个一个连接来骗取一个Entinty,但我有一些问题。有多个连接的查询生成器的例外

执行选择的代码是: $ em = $ this-> getEntityManager();

try 
    { 
     $q=$em->createQueryBuilder('i') 
      ->from('AppBundle:Images','i') 
      ->innerJoin('AppBundle:ImageGroups', 'g') 
      ->innerJoin('AppBundle:Users','u') 
      ->select('i') 
      ->where('i.id=:iid') 
      ->andWhere('u.id=:uid') 
      ->setParameter(':uid', $user_id) 
      ->setParameter(':iid', $image_id) 
      ->setMaxResults(1) 
      ->getQuery(); 

     $data=$q->getOneOrNullResult(); 

     if(empty($data)) return -3; 

     /*Delete Image Stuff*/ 
     /*End Of: Delete Image Stuff*/ 

     /*Do some stuff here*/ 

     return true; 

    } 
    catch (\Exception $e) 
    { 
     echo $e->getMessage(); 
     return false; 
    } 

但由于某些原因,我得到这个异常消息:

[Syntax Error] line 0, col 74: Error: Expected Literal, got 'JOIN' 

你有任何形式的想法,为什么出现这种情况呢?

的图片实体包含:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="images") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\ImagesRepository") 
*/ 
class Images 
{ 
    /** 
    * @ORM\Column(type="string", length=60) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="CUSTOM") 
    * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate") 
    */ 
    private $id; 

    /** 
    * Filename of the Image 
    * @ORM\Column(type="string", length=100) 
    */ 
    private $name; 

    /** 
    * Filename of the Thumbnail 
    * @ORM\Column(type="string", length=100) 
    */ 
    private $name_small; 

    /** 
    * ImageGroup og the Image 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ImageGroups", inversedBy="images") 
    */ 
    private $group; 


    /** 
    * Get id 
    * 
    * @return string 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

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

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set nameSmall 
    * 
    * @param string $nameSmall 
    * 
    * @return Images 
    */ 
    public function setNameSmall($nameSmall) 
    { 
     $this->name_small = $nameSmall; 

     return $this; 
    } 

    /** 
    * Get nameSmall 
    * 
    * @return string 
    */ 
    public function getNameSmall() 
    { 
     return $this->name_small; 
    } 

    /** 
    * Set group 
    * 
    * @param \AppBundle\Entity\ImageGroups $group 
    * 
    * @return Images 
    */ 
    public function setGroup(\AppBundle\Entity\ImageGroups $group = null) 
    { 
     $this->group = $group; 

     return $this; 
    } 

    /** 
    * Get group 
    * 
    * @return \AppBundle\Entity\ImageGroups 
    */ 
    public function getGroup() 
    { 
     return $this->group; 
    } 
} 

的图片组包含:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="image_groups") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\ImageGroupsRepository") 
*/ 
class ImageGroups 
{ 

    /** 
    * @ORM\Column(type="string", length=60) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="CUSTOM") 
    * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string", length=20) 
    */ 
    private $groupname; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Users", inversedBy="imagegroups") 
    */ 
    private $users; 


    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->user = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return string 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set groupname 
    * 
    * @param string $groupname 
    * 
    * @return ImageGroups 
    */ 
    public function setGroupname($groupname) 
    { 
     $this->groupname = strip_tags($groupname); 

     return $this; 
    } 

    /** 
    * Get groupname 
    * 
    * @return string 
    */ 
    public function getGroupname() 
    { 
     return $this->groupname; 
    } 

    /** 
    * Set users 
    * 
    * @param \AppBundle\Entity\Users $users 
    * 
    * @return ImageGroups 
    */ 
    public function setUsers(\AppBundle\Entity\Users $users = null) 
    { 
     $this->users = $users; 

     return $this; 
    } 

    /** 
    * Get users 
    * 
    * @return \ppBundle\Entity\Users 
    */ 
    public function getUsers() 
    { 
     return $this->users; 
    } 

    /** 
    * Add image 
    * 
    * @param \AppBundle\Entity\Images $image 
    * 
    * @return ImageGroups 
    */ 
    public function addImage(\AppBundle\Entity\Images $image) 
    { 
     $this->images[] = $image; 

     return $this; 
    } 

    /** 
    * Remove image 
    * 
    * @param \AppBundle\Entity\Images $image 
    */ 
    public function removeImage(\AppBundle\Entity\Images $image) 
    { 
     $this->images->removeElement($image); 
    } 

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

而且用户实体包含:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 


/** 
* @ORM\Entity 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository") 
*/ 
class Users 
{ 
    /** 
    * @ORM\Column(type="string", length=60) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="CUSTOM") 
    * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string", length=15, unique = true) 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string", length=80) 
    */ 
    private $password; 

    /** 
    * @ORM\Column(type="string", length=60, unique = true) 
    */ 
    private $token; 

    /** 
    * @ORM\Column(type="boolean", options={"default"=false}, nullable=true) 
    */ 
    private $activated=false; 

    /** 
    * @ORM\Column(type="string", length=30, unique = true) 
    */ 
    private $email; 


    /** 
    * Get id 
    * 
    * @return string 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set username 
    * 
    * @param string $username 
    * 
    * @return Users 
    */ 
    public function setUsername($username) 
    { 
     $this->username = strip_tags($username); 

     return $this; 
    } 

    /** 
    * Get username 
    * 
    * @return string 
    */ 
    public function getUsername() 
    { 
     return $this->username; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return Users 
    */ 
    public function setPassword($password) 
    { 
     $this->password = password_hash ($password,CRYPT_BLOWFISH); 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set token 
    * 
    * @param string $token 
    * 
    * @return Users 
    */ 
    public function setToken($token) 
    { 
     $this->token = $token; 

     return $this; 
    } 

    /** 
    * Get token 
    * 
    * @return string 
    */ 
    public function getToken() 
    { 
     return $this->token; 
    } 

    /** 
    * Set activated 
    * 
    * @param boolean $activated 
    * 
    * @return Users 
    */ 
    public function setActivated($activated) 
    { 
     $this->activated = $activated; 

     return $this; 
    } 

    /** 
    * Get activated 
    * 
    * @return boolean 
    */ 
    public function getActivated() 
    { 
     return $this->activated; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * 
    * @return Users 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 
    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 
} 
+0

学说查询语言(DQL)不是SQL。从基础开始:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/query-builder.html – Cerad

通过关系加入实体(或为教义2.4你可以使用任意连接,但在这种情况下你有关系,所以使用它们)并删除:个时设置参数:

// I presume it's in a repository class 
// so the select and from parts are not required 
return $this->createQueryBuilder('i') 
    ->innerJoin('i.group', 'g') 
    ->innerJoin('g.users', 'u')  
    ->where('i.id = :iid') 
    ->andWhere('u.id = :uid')  
    ->setParameter('uid', $user_id) 
    ->setParameter('iid', $image_id) 
    ->setMaxResults(1) 
    ->getQuery() 
    ->getOneOrNullResult(); 

// or if it is not in a repository 
$em->createQueryBuilder() 
    ->select('i') 
    ->from('AppBundle:Images','i') 
// -> ... 

你应该阅读docs