2016-04-10 41 views
-1

ile Sorgulama biraz karışık, neden bu çalışmıyor.Symfony - Sorgulama

İki varlığa sahibim, kullanıcı adı verilen bir varlık ve shed adında bir varlık var. 1 kullanıcı bir çok tutmaya sahip olabilir ve 1 kullanıcı bir kutuya ait olabilir.

Ne ben başarmak istiyorum ben yayınlanmaktadır aktif kullanıcılardan en yeni 3 tutuyor sorgulamak yani, bir ManyToOne

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; 
} 

ile bağlanır.

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 mülkiyet 0'dır kulübe gösterilmez: Benim ShedRepository olarak

i aşağıdaki yöntemi var. Kulübenin yayınlandığı, ancak kullanıcı inaktif ise, döken de gösterilir, ancak olmamalıdır. Herkes bana yardım edebilir mi?

active öznitelik için

cevap

1

Doğru ek açıklama olmalıdır:

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

Analogic ile (adını ve nitelik eşlemediyseniz yapılmış ve bu nedenle her zaman doğruydu sütununda, türünü belirtmek için unuttum) Shed öğesinin yayınlanmış özniteliği.

DÜZENLEME (Doğru yanıt):

yanlış() görüşmesine katılmak var. Kullanmanız gereken: ->join('s.user', 'u')

+0

bu doğru değil, sütunu belirtmek için columnDefinitions'ı kullanabilirsiniz. ve öznitelik varsayılan değeri false değerine ayarlanmış :) Ya da, değişiklikleriniz benim prob'umu çözmüyor :( – Sharpy35

+0

Koşulların olduğu durumlarda '1' yerine' TRUE' kullanmayı deneyin, örneğin: -> veWhere ('u.active = TRUE') ' – Miro

+0

bunu denedi, sonucu yanlış anlamadığını, sonucunu değiştirmediğini, yayınlanan kısıtlamayı çalıştığını, ancak etkin değil :( – Sharpy35