我会对此快速而简单。 基本上我需要快速而快速地合并多个发票(对象)。
一个简单的想法是
$invoice1 = new Invoice(1);
$invoice2 = new Invoice(2);
$invoice3 = new Invoice(3);
$invoice1->merge($invoice2,invoice3);
$invoice1->save();
由于每个对象都会查询自己的数据,因此查询数量会随着需要合并的发票数量的增加而增加。
但是,这是单个查询的情况
SELECT * FROM invoice WHERE id IN (1,2,3)
这样就足够了,但是实现不会像上面那样优雅。
样本数据的初步基准测试显示,由于mysql查询的数量庞大,上述速度降低了2.5倍-3倍。
请咨询
答案 0 :(得分:2)
使用发票工厂。您可以使用各种方法询问发票。最新的(n)get(id)get(array(id,id,id))等等,它返回发票或单个发票对象的数组。
<?php
$invoice56 = InvoiceFactory::Get(56); // Get's invoice 56
$invoices = InvoiceFactory::Newest(25); // Get's an array of the newest 25 invoices
?>
答案 1 :(得分:0)
你能让Invoice
对象变懒,让merge
加载尚未加载的所有内容吗?
答案 2 :(得分:0)
确保始终使用相同的数据库连接。检查它是否在一个脚本执行线程中没有重新连接。
答案 3 :(得分:0)
我可以建议使用实际的ORM(对象关系映射)来创建实际查询和使用的对象之间的分离。看看Propel或(我最喜欢的)Doctrine(版本2是非常易于使用)
这样你就可以在相同数量的代码中得到你想要的东西......