2016-03-22 16 views
0

Şu an saatlerce için arama yaptım ve aradığım yanıtı bulamıyorum. Symfony2'de, bir sezonda Criteria :: create() ve filtresini kullanmaya çalışıyorum ve çalışmıyor. İşte tam açıklama:symfony2 objelerle ilgili varlıklar üzerinde filtreleme

4 Varlığım var: Kullanıcı, KullanıcıPolicy, Rol ve Sezon. UserPolicy RoleInterface uygular ve Kullanıcı UserInterface uygular.

User.php

class User implements UserInterface, \Serializable { 

    /** 
    * @OneToMany(targetEntity="UserPolicy", mappedBy="User", cascade={"persist", "remove"}) 
    */ 
    private $Polocies; 

} 

UserPolicy.php

Role.php

class Role{ 

    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @Column(name="role", type="string", length=50) 
    */ 
    private $Role; 

    /** 
    * @Column(name="label", type="string", length=50) 
    */ 
    private $Label; 

    /** 
    * @ManyToOne(targetEntity="Role") 
    * @JoinColumn(name="parentId", referencedColumnName="id", nullable=true) 
    */ 
    private $Parent; 
} 

Not UserPolicy üzerinde $ Sezon değişkeni.

Her yıl yeni bir sezon olacak ve kullanıcılar önceki sezon politikalarını koruyarak yeni bir politika seti alacaklar.

User.php dosyasında, getRoles() işlevini çağırmam gerekiyor ve bu rolleri kendilerine eklenmiş olan ve aynı zamanda da çalışan KullanıcıPolitelerini alabiliyorum.

Mevsim filtrelemem gerektiğinde sorun ortaya çıkıyor. Ben Kriterler sınıfı bulundu:

$criteria = Criteria::create() 
      ->where(Criteria::expr()->eq("Season", "1")); 

Fakat Sezon bir nesne olduğu için, ben hata i edebilmek gerekiyordu olsam Sezon Nesne getirme nasıl

Cannot match on AppBundle\Entity\UserPolicy::Season with a non-object value. Matching objects by id is not compatible with matching on an in-memory collection, which compares objects by reference. 

alıyorum Kullanıcı Varlığı'ndaki diğer verileri yükle? Sezon nesnesini nasıl geçeceğimi bilmiyorum. Sezon nesnesine erişmek için bir hizmet bile oluşturdum, ancak Entity içindeki get() işlevine erişemiyorum. YARDIM ET!

cevap

1

Sizinle benzer bir sorunu açıklayan this question buldum. Kriterleri, tarif ettiğiniz şekilde kullanmak mümkün değildir.

  1. tüm koleksiyonu getir ve sonra the question I mentioned earlier gibi sezonu göre filtreleme:

    Yani üç çözüm bulunmaktadır.

  2. Kullanıcı ilkelerini sezon kimliğine göre almak için bir veri tabanı yöntemi oluşturun. İlk önce mevsimi getirin ve sonra varlık deposunun varsayılan findBy() yönteminde kullanın.

Bu yardımcı olur umarım.

+0

Seçenekler 2 ve 3 yararlıdır, ancak sorun kullanıcı arabirimi için gerekli olan getRoles üzerindedir. Varlık içinde bir depo yöntemi kullanamıyorum ve bir varlıktaki başka bir varlığı alamıyorum. – chollan

+0

Bu durumda en basit çözümün birinci seçenekle birlikte gitmesi ve 'getRoles()' yöntemindeki ilkeleri filtrelemek olduğunu düşünüyorum. Tanrının bu politikalardan kaç tanesini bilmediği sürece, performans açısından bir sorun olmayacaktır. –

+0

Birinci seçenekten hoşlanıyorum ve çok fazla şey ifade ediyor.Ancak bunu uygularken, 1’den birinin zor kodlanmış olduğunu anlıyorum. Mevsimi kendi kuruluşundan bu yana koyabileceğim global bir değişkene erişmenin bir yolu var mı? – chollan