2016-02-28 33 views
2

我試圖用多個一個連接來騙取一個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

通過關係加入實體(或爲教義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

相關問題