是否可以过滤实体并在symfony2中只显示几列? 我想我可以为此做一个自定义查询,但它似乎有点脏,我相信有更好的解决方案。 例如,我在下面有我的变量$ createdBy,它包含一些不应该在这个父实体中显示的数据,如密码等......
/**
* @var Customer
*
* @ORM\ManyToOne(targetEntity="MyCompany\Bundle\CustomerBundle\Entity\Customer")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="created_by", referencedColumnName="id", nullable=false)
* })
*/
protected $createdBy;
所以我需要显示我的Customer实体,但仅包含id和name等字段。 编辑: 我已经有了一个Project实例,带有我的createdBy字段的实体,我想抓住我的客户数据'格式化'为这个实体,而不是返回太多字段,如密码......
由于
答案 0 :(得分:0)
这对我来说听起来像是预期的行为。该学说文档似乎意味着急切的提取只有一个层次。
根据文件:
每当您查询具有持久关联的实体时 这些关联被映射为EAGER,它们将自动成为 与被查询的实体一起加载,因此立即加载 适用于您的应用程序。
http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html#by-eager-loading
被查询的实体渴望创建它,因此它将被填充。
绕过您可以在您的实体存储库中创建一个方法,如下所示:
// join entities and load wanted fields
public function findCustom()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Product p ORDER BY p.name ASC'
)
->getResult();
}
尝试这个并告诉我它是否有效,你应该填写正确的存储库名称
'XXXXBundle:CustomerYYYY','c'
public function findUser($user_id){
$qb = $this->_em->createQueryBuilder('c')
->select(array('c', 'cb.id', 'cb.name'))
->from('XXXXBundle:Customer', 'c')
->where('c.id <> :id')
->leftJoin('c.createdBy', 'cb')
->setParameter('id', $user_id)->getQuery();
if ($qb != null)
return $qb->getOneOrNullResult();
return null;
}