【发布时间】:2017-01-27 16:49:11
【问题描述】:
我的代码是
$bars = $em->getRepository('AppBundle:Bar')->findAll();
还有实体
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=45, nullable=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="location", type="string", length=45, nullable=true)
*/
private $location;
/**
* @var string
*
* @ORM\Column(name="zipcode", type="string", length=45, nullable=true)
*/
private $zipcode;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=45, nullable=true)
*/
private $description;
/**
* @ORM\OneToMany(targetEntity="Waiter", mappedBy="bar", fetch="EXTRA_LAZY")
*/
protected $waiters;
/**
* @ORM\OneToMany(targetEntity="Table_", mappedBy="bar", fetch="EXTRA_LAZY")
*/
protected $tables;
/** @ORM\OneToMany(targetEntity="Stock_food", mappedBy="bar", fetch="EXTRA_LAZY") */
private $stockfoods;
/** @ORM\OneToMany(targetEntity="Stock_drink", mappedBy="bar", fetch="EXTRA_LAZY") */
private $stockdrinks;
我只想检索没有关联实体的酒吧实体(Waiter、Table_、Stock_drink、Stock_food)。
响应是所有数据,但我只需要名称、位置、邮政编码和描述。
提前致谢!!!
【问题讨论】:
-
最简单的解决方案是在您的存储库中添加一个自定义方法并编写查询而不使用诸如 findOneBy、findAll 等 ORM 快捷方式。
-
我想使用 ORM,因为我需要处理对象而不是 DQL 中的查询
-
你确定你得到了完整的对象吗? IMO 您只能获得代理类(将被创建)。 docs.doctrine-project.org/projects/doctrine-orm/en/latest/… EXTRA_LAZY 不要进行 JOINS - 相反,如果您尝试从此类对象中获取属性 Doctrine 将进行额外的 SQL 查询
-
澄清一下,如果您编写自定义查询,您也可以检索对象。只检索所需的数据/对象很简单。花时间阅读更多深入的文档。
-
虽然在所有关联的实体中我都放了 fetch 额外的懒惰,但当我进行查询时,它会返回所有关联的实体。