php orm 学说如何获取对象及其相关连接

Posted

技术标签:

【中文标题】php orm 学说如何获取对象及其相关连接【英文标题】:how php orm doctrine fetch object and its related joins 【发布时间】:2012-08-28 23:35:40 【问题描述】:

我在我的 php 项目中使用 doctrine ORM。 我想知道教义如何从数据库中获取对象(其表)?

它是否获取该对象的所有相关 联接 以及所有相关对象? 假设 $author$article 有关联。 $author = $authorRepository->find($id) 是否获取文章表?

它是否获取该对象的连接的连接

我在转储 ORM 对象时遇到了这个问题。我看到了它所有的协会标题。例如:$author 的学说转储:

object(stdClass)#1212 (4) 
  ["__CLASS__"]=>
    string(6) "author"
  ["ID"]=>
    int(12)
  ["num"]=>
    int(6059996)
  ["CreateTimestamp"]=>
    int(1316602238)
  ["articles"]=>
    array(3) 
      [0]=>
        string(7) "article"
      [1]=>
        string(7) "article"
      [2]=>
        string(7) "article"
    

【问题讨论】:

您必须更加具体,并提供一些上下文代码。我也想知道很多事情,比如你是否尝试过这样做。 作为字符串的关联实际上来自虚拟代理对象,它是具有一些存储逻辑的真实实体的副本,以便在您请求其中一篇文章时完成延迟加载。您可以在调用$author->getArticles() 之前和之前尝试转储以查看结果。 【参考方案1】:

我想知道教条如何从数据库中获取对象(其表)?

基本上使用Data Mapper Pattern

它是否获取该对象的所有相关连接以及所有相关 对象?它是否获取该对象的连接的连接?

不,它没有。除非您使用DQL、query builder 或native SQL 指定它。

如果您在其存储库中获得一个对象,请说:$author = $authorRepository->find($id);它只会从一个表中获取(class table inheritance 除外)

如果您随后要求 $author 对象检索其关系,例如:$author->getBooks(); 而不事先指定它(与 DQL/SQL 连接),那么它将使用 lazy loading,通过 虚拟代理模式实现 并将执行另一个分隔查询以检索数据

【讨论】:

以上是关于php orm 学说如何获取对象及其相关连接的主要内容,如果未能解决你的问题,请参考以下文章

学说 2 和 ORM:如何缓存某个实体的每个查询?

如何在学说 ORM Symfony 4.1 中使用 array_agg?

如何在没有实体的学说查询中合并连接表

如何在学说 2 中创建对象属性的查询构建器

如何获取相关对象 Propel ORM

Symfony 2 实体连接或学说查询连接