【发布时间】:2014-06-23 11:08:12
【问题描述】:
我有一个实体“Note”,它以多对多关系链接到我的实体“用户”。从我的用户实体中,我想获取所有符合特定条件的笔记。
我知道通过 ORM 你可以这样做:
$this->getDoctrine()->getRepository('PmbLicensingBundle:Note')->findBy(array('criteria' => $value));
通过在实体上调用方法是否可以实现相同的事情,例如:
$this->getUser()->getSharedNotes(array('criteria' => $value));
或者,有没有办法使用以前的 ORM 命令在多对多关系中进行过滤,例如:
$this->getDoctrine()->getRepository('PmbLicensingBundle:Note')->findBy(array('criteria' => $value, sharedUsers CONTAINS $this->getUser()));
摘自实体 User.php:
/**
* User
*
* @ORM\Entity
* @ORM\Table(name="users")
* @Ser\ExclusionPolicy("all")
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Ser\Expose
*/
protected $id;
/**
* @var User[]
*
* @ORM\ManyToMany(targetEntity="Pmb\LicensingBundle\Entity\User", inversedBy="sharedNotes")
* @Ser\Expose
**/
protected $sharedUsers;
...
}
摘自Entity User.php
/**
* User
*
* @ORM\Entity
* @ORM\Table(name="users")
* @Ser\ExclusionPolicy("all")
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Ser\Expose
*/
protected $id;
/**
* @var Note[]
*
* @ORM\ManyToMany(targetEntity="Pmb\LicensingBundle\Entity\Note", mappedBy="sharedUsers")
* @Ser\Expose
**/
protected $sharedNotes;
...
}
或者,对于 ManyToMany 或 OneToMany 属性,推荐的解决方案匹配标准是什么?我宁愿在不依赖实体管理器的情况下执行此操作。
【问题讨论】:
标签: php symfony orm doctrine-orm