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 学说如何获取对象及其相关连接的主要内容,如果未能解决你的问题,请参考以下文章