从实体关系获取唯一的ID,而不会在Doctrine中获取整个对象 [英] Getting only ID from entity relations without fetching whole object in Doctrine
问题描述
class Food
{
/ **
* @ ORM\Id
* @ ORM\Column(type =integer)
* @ ORM\GeneratedValue(strategy =AUTO )
* /
protected $ id;
/ **
* @ ORM\ManyToOne(targetEntity =Food,inversedBy =foodChildren)
* @ ORM\JoinColumn(name =food_group_id ,nullable = true)
* /
protected $ foodGroup;
/ **
* @ ORM\OneToMany(targetEntity =Food,mappedBy =foodGroup,fetch =LAZY,cascade = {remove})
* /
protected $ foodChildren;
我有一个用例,我想要得到 food_group_id
,而不会从数据库中获取完整的父对象。使用 fetch =LAZY
不会让Doctrine再次查询。有没有办法只在获得 $ food-> getFoodGroup()
时返回ID?
不要使你的生活复杂化,你可以做
$ food-> getFoodGroup ) - > getId()
此不会执行任何其他查询或触发懒惰加载!
为什么?因为您的 $ food-> foodGroup
是一个知道它的ID的代理对象。如果您调用某个尚未加载的字段的getter方法,则只会执行延迟加载。
Assume I've an entity, which references itself to map parent-child-relations
class Food
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Food", inversedBy="foodChildren")
* @ORM\JoinColumn(name="food_group_id", nullable=true)
*/
protected $foodGroup;
/**
* @ORM\OneToMany(targetEntity="Food", mappedBy="foodGroup", fetch="LAZY", cascade={"remove"})
*/
protected $foodChildren;
I have a use case where I want to get food_group_id
of an entity without getting full parent object from database. Using fetch="LAZY"
doesn't keep Doctrine from querying again. Is there a way to return only the ID when getting $food->getFoodGroup()
?
Don't complicate your life, you can just do
$food->getFoodGroup()->getId()
This WILL NOT perform any additional query or trigger lazy load!
Why? Because your $food->foodGroup
is a proxy object which knows about it's ID. It will only do lazy load if you call a getter method of some field which hasn't been loaded.
这篇关于从实体关系获取唯一的ID,而不会在Doctrine中获取整个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!