OO表现问题

时间:2010-12-07 14:14:52

标签: php mysql oop

我会对此快速而简单。 基本上我需要快速而快速地合并多个发票(对象)。

一个简单的想法是

$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倍。

请咨询

4 个答案:

答案 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是非常易于使用)

这样你就可以在相同数量的代码中得到你想要的东西......

相关问题