[英]PHP (Phalcon Framework) and MySQL: Models Relationships vs JOIN
例如,有3个表:
在这3个表的模型中存在一对一的关系。
通过在页面上显示50个产品-周期内它会获得+2个额外的查询,因此总共有150行和很酷的对象:
$products = Products::find();
foreach ($products as $product)
{
$product->name;
$product->images->filename;
$product->specs->volume;
}
或者只是在Products Model中创建自定义方法并加入所有必要的表:
$products = Products::getComplete();
foreach ($products as $product)
{
$product->name;
$product->imageFile;
$product->specVolume;
}
因此,我想知道:第一种做法是否有用,并且不会在MySQL守护程序上造成高负载,或者不会大大降低php脚本的执行时间?
回答第一个问题:这种做法可能有用,但要取决于您的确切实现。
但是,你是对的。 使用内置的一对一关系将在每次引用相关模型时对其进行查询,而这是密集的。 所以:
$products->images
是每个记录的新查询。
幸运的是,有一种更好,更有效的方法可以达到相同的结果-PHQL。
由于一对一基本上是通过第二个查询(实际上不需要时)调用的联接表,因此您可以通过执行以下操作来完成相同的操作:
$products =
(new \Phalcon\Mvc\Model)
->getModelsManager()
->executeQuery(
"SELECT products.*, product_images.*, product_specs.* ".
"FROM Products AS products ".
"JOIN ProductImages AS product_images ".
"ON products.id = product_images.product_id ".
"JOIN ProductSpecs AS product_specs ".
"ON products.id = product_specs.product_id");
只会做一个查询,并为您提供以前想要的相同信息。
这只是您必须识别昂贵的查询并选择其他方法的一种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.