2016-04-10 183 views
-1

我有點困惑,爲什麼這不起作用。Symfony - 加入查詢生成器

我有兩個實體,一個叫做user的實體和一個叫shed的實體。 1個用戶可以有多個棚屋,1個棚屋可以屬於1個用戶。

它們與多對一

class User 
{ 

/** 
* @var boolean 
* 
* @ORM\Column(columnDefinition="TINYINT(1) NOT NULL") 
*/ 
protected $active = true; 


/** 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Shed", mappedBy="user") 
    */ 
    protected $shed; 
} 

class Shed 
{ 
    /** 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="shed") 
* @ORM\JoinColumn(name="user", referencedColumnName="id", onDelete="CASCADE") 
* 
* @var User 
*/ 
protected $user; 

/** 
* @var boolean 
* 
* @ORM\Column(columnDefinition="TINYINT(1) NOT NULL") 
*/ 
protected $published = false; 
} 

連接我想要實現的是,我查詢從已公佈的活躍用戶最新的棚3。

以我ShedRepository我有以下方法:

class ShedRepository 
{ 
    public function getNewestSheds() 
    { 
     $query = $this->createQueryBuilder('s') 
      ->join('AppBundle:User', 'u') 
      ->andWhere('u.active = 1') 
      ->andWhere('s.published = 1') 
      ->orderBy('s.createdAt', 'DESC') 
      ->setMaxResults(3) 
      ->getQuery(); 

     return $query->getResult(); 
     } 
} 

當shed.published屬性爲0棚屋未示出。如果棚屋已經發布但用戶不活躍,棚屋也會顯示,但不應該。 任何人都可以幫助我嗎?

回答

1

active屬性正確標註應該是:

/** 
* @var boolean 
* 
* @ORM\Column(name="active", type="boolean", columnDefinition="TINYINT(1) NOT NULL") 
*/ 

(你忘了指定名稱和列,這使得屬性沒有地址,所以它總是正確的類型)

諾邏輯與發佈Shed實體的屬性。

EDIT(正確答案):

你有錯誤的連接()調用。您需要使用:->join('s.user', 'u')

+0

那不是真的, 您可以使用columnDefinitions來指定列。 和attribut的默認值設置爲false :) 儘管如此,您的更改並不能解決我的問題:( – Sharpy35

+0

嘗試在條件中使用'TRUE'而不是'1',例如:' - >和WHERE ('u.active = TRUE')' – Miro

+0

試過了,沒有改變結果我不知道最新錯誤,已發佈的約束正在工作,但活動沒有:( – Sharpy35