我是 PHP 新手,也是 Propel 新手。
正如我所读到的,Propel 有一个实例池来重用查询。
例如
<?php
// first call
$author1 = AuthorQuery::create()->getByFooField('foo');
$foo = $author1->getId();
// SELECT query
...
// second call
$author2 = AuthorQuery::create()->getByFooField('Foo');
// Skips the SQL query and returns the existing $author1 object
$foo = $author2->getId();
事情是
这个物体存活了多少时间?这是因为我必须解析一个 excel,并构建一些对象以将它们保存在数据库中。
所以,也许在我读了 100 行的 excel 中,我读了 25 次 'foo',所以,如果我能避免 24 次查询,每次查询数据库以获得 PK 将是一件坏事。
看起来Instance Propel解决了这个问题,但我不知道多少次。
这取决于时间、使用的内存或执行查询的范围之类的东西?(我的意思是,可能在执行第一个查询的方法之后,实例池被清除了,所以,除非第二个查询在同一个方法中,否则它将再次查询数据库。或者当对象还活着时,我不知道不知道)
我搜索了一下,但没有找到任何东西,我的直觉告诉我这取决于使用的内存,但是,没有官方的。
或者也许有更好的方法来做到这一点。