我不确定我想做的事情是否可行,但是我找不到任何相关文档。希望我只是在错误的地方寻找。
我想做的是加载一个对象,该对象将始终加载相关对象的子集。一些背景-我想保留用户删除的联系人的历史记录,因此当删除联系人时,我会将数据库中的"isDeleted"列设置为true。我很少需要加载已删除的联系人,所以稍后再考虑这个问题。但是,当我加载用户,然后加载联系人(在我的情况下通过序列化整个"user"对象),所有的联系人都被加载,包括已删除的联系人。因此,我只想加载尚未删除的联系人。这就是我现在拥有的,我不知道为什么它不起作用。
以下是生成的JSON结果:
我不确定为什么仍然加载已删除的用户。如果我在控制器中进行筛选而不是在实体类中进行筛选,则筛选将起作用。但我不想在应用程序中每次加载联系人时都这样做。如果我能在实体类中得到可工作的解决方案,那就太理想了。有人做过类似的事情可以起作用吗?
我正在使用Symfony 2.3。
我想做的是加载一个对象,该对象将始终加载相关对象的子集。一些背景-我想保留用户删除的联系人的历史记录,因此当删除联系人时,我会将数据库中的"isDeleted"列设置为true。我很少需要加载已删除的联系人,所以稍后再考虑这个问题。但是,当我加载用户,然后加载联系人(在我的情况下通过序列化整个"user"对象),所有的联系人都被加载,包括已删除的联系人。因此,我只想加载尚未删除的联系人。这就是我现在拥有的,我不知道为什么它不起作用。
use Doctrine\Common\Collections\Criteria,
Doctrine\Common\Collections\ArrayCollection;
class User{
/**
* @ORM\OneToMany(targetEntity="Contacts", mappedBy="user", cascade={"persist"}, fetch="EXTRA_LAZY")
* @ORM\JoinColumn(name="contact_id", referencedColumnName="contact_id")
*/
private $contacts;
public function __construct(){
$this->contacts = new ArrayCollection();
}
/**
* Get contacts
*
* @return \Doctrine\Common\Collections\ArrayCollection
*/
public function getContacts()
{
// This is where I am filtering the contacts
$criteria = Criteria::create()
->where(Criteria::expr()->eq("isDeleted", false));
return $this->contacts->matching($criteria);
}
然后我在控制器中使用JMS序列化器和FOSRest来加载和序列化用户。
public function getUserAction($slug){
$data = $this->getDoctrine()->getRepository('MyCoreBundle:User')->find($slug);
$view = $this->view($data, 200);
return $this->handleView($view);
}
以下是生成的JSON结果:
{
userId: 7,
creationDate: "2014-07-28T22:05:43+0000",
isActive: true,
username: "myUser",
contacts: [
{
contactId: 23,
firstName: "Jim",
lastName: "Bin",
email: "zzz@zzz.com",
phone: "1231231231",
isDeleted: true
}
]
}
我不确定为什么仍然加载已删除的用户。如果我在控制器中进行筛选而不是在实体类中进行筛选,则筛选将起作用。但我不想在应用程序中每次加载联系人时都这样做。如果我能在实体类中得到可工作的解决方案,那就太理想了。有人做过类似的事情可以起作用吗?
我正在使用Symfony 2.3。