簡體   English   中英

symfony2對具有實體的相關實體進行過濾

[英]symfony2 filtering on related entities with entities

我已經在Google搜索了幾個小時,但似乎找不到我要的答案。 在Symfony2中,我嘗試使用Criteria :: create()並過濾季節,但該季節不起作用。 這是完整的解釋:

我有4個實體:User,UserPolicy,Role和Season。 UserPolicy實現RoleInterface,而User實現UserInterface。

User.php

class User implements UserInterface, \Serializable {

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

}

UserPolicy.php

class UserPolicy Implements RoleInterface
{
    /**
     * @Id()
     * @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="Polocies")
     * @JoinColumn(name="userid", referencedColumnName="id")
     */
    private $User;

    /**
     * @ManyToOne(targetEntity="Role")
     * @JoinColumn(name="roleid", referencedColumnName="id")
     */
    private $Role;

    /**
     * @ManyToOne(targetEntity="Season")
     * @JoinColumn(name="seasonid", referencedColumnName="id")
     */
    private $Season;
}

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

請注意UserPolicy上的$ Season變量。

每年都會有一個新的季節,用戶將獲得一套新的政策,並保持以前的季節政策。

在User.php中,我需要調用可正常工作的getRoles(),並且我可以獲得具有附加角色且也可以正常工作的UserPolicies。

當我需要按季節過濾時,會引入問題。 我找到了Criteria類:

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

但是因為Season是一個對象,所以我得到了錯誤

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.

如果我無法在用戶實體中加載其他數據,該如何獲取Season Object? 我不知道如何通過季節對象。 我什至創建了訪問季節對象的服務,但是無法訪問實體內部的get()函數。 救命!

我發現此問題描述了與您類似的問題。 無法按照您描述的方式使用標准。

因此,有三種解決方案:

  1. 提取整個集合,然后按季節過濾,就像我前面提到的問題一樣

  2. 創建一個存儲庫方法以按季節ID提取用戶策略。

  3. 首先獲取季節,然后在實體存儲庫的默認findBy()方法中使用它。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM