我有这个基本模型:
当我从表中获取一个条目book
并转储输出时:
// no other Doctrine queries were made before this one:
$book = $em->getRepository('Entities\Book')->find(1);
var_dump($book);
我得到了Book
实体,但也得到了一个代理实体Author
:
object(Entities\Book)#179 (3) {
["id":"Entities\Book":private]=>
int(1)
["title":"Entities\Book":private]=>
string(7) "MyBook1"
["author":"Entities\Book":private]=>
object(Doctrine\Proxy\__CG__\Entities\Author)#171 (5) {
[...] // many more lines of output
我的理解是,代理实体Author
是可以预期的,因为当我这样做时,这就是Doctrine
延迟加载表中信息的方式。author
$book->getAuthor()
Q1:您是否确认现阶段预期会出现代理作者实体?
然而让我印象深刻的是,当我查看var_dump
输出(我已上传到 pastebin 供您查看)时,它包含的不仅仅是10,000
行!我没想到会找到的东西包括对模型的引用dummy_table1
和与模型dummy_table2
无关的book
引用author
:
["dummy_table1"]=> // line 1301
object(Doctrine\DBAL\Schema\Table)#194 (10) {
["dummy_table2"]=> // line 1384
object(Doctrine\DBAL\Schema\Table)#191 (10) {
Q2:这也是预期的吗?
从那里我想知道:如果我想将包含$book
在缓存中的信息存储在serialize
以后在我的视图中重新使用(我不是在谈论用 做一些操作$book
,只是输出一些属性),它会疯狂,因为我会500KB
为书名而存储,这使我想到了最后一个问题:
Q3:您如何缓存 Doctrine 查询的结果?您是否将整个实体序列化到缓存中,是否将所需的信息提取到数组中,然后将该数组存储在缓存中,但如果是这样,它不会很快变得很麻烦......?