[英]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()函數。 救命!
我發現此問題描述了與您類似的問題。 無法按照您描述的方式使用標准。
因此,有三種解決方案:
提取整個集合,然后按季節過濾,就像我前面提到的問題一樣 。
創建一個存儲庫方法以按季節ID提取用戶策略。
首先獲取季節,然后在實體存儲庫的默認findBy()
方法中使用它。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.