克隆模型查询是否可以避免在Yii2中调用MySQL查询?

克隆模型查询是否可以避免在Yii2中调用MySQL查询?,yii,yii2,Yii,Yii2,我想找到不同列的总和,我可以使用以下两种方法: 第一路 $obj = $modelClass::findBySql($sql, $params); $clone = clone $obj; $grand_amount = $clone->sum('amount'); $grand_tax_amount = $clone->sum('tax_amount'); $grand_total =$clone->sum('total_amount'); $grand_amount

我想找到不同列的总和,我可以使用以下两种方法:

第一路

$obj = $modelClass::findBySql($sql, $params);
$clone = clone $obj;


$grand_amount = $clone->sum('amount');
$grand_tax_amount = $clone->sum('tax_amount');
$grand_total =$clone->sum('total_amount');
$grand_amount = $modelClass::findBySql($sql1, $params)->sum('amount');
$grand_tax_amount = $modelClass::findBySql($sql1,$params)->sum('tax_amount');
$grand_total = $modelClass::findBySql($sql1, $params)->sum('total_amount');
第二条道路

$obj = $modelClass::findBySql($sql, $params);
$clone = clone $obj;


$grand_amount = $clone->sum('amount');
$grand_tax_amount = $clone->sum('tax_amount');
$grand_total =$clone->sum('total_amount');
$grand_amount = $modelClass::findBySql($sql1, $params)->sum('amount');
$grand_tax_amount = $modelClass::findBySql($sql1,$params)->sum('tax_amount');
$grand_total = $modelClass::findBySql($sql1, $params)->sum('total_amount');

参照以上两种方式,哪种方式更有效?或者两种方法都将执行相同数量的查询?

克隆查询与否无关紧要
sum()
执行实际的SQL查询-如果调用三次,将得到三个查询

从微观优化的角度来看,克隆应该比创建同一查询对象快三倍。但您不会看到太大的差异——执行真正的SQL查询将是这里的主要瓶颈,PHP开销可以忽略不计



顺便说一句:从您的示例中克隆没有多大意义-您从未使用过原始的
$obj
,并且
$clone
被使用了三次。您可以直接使用
$obj
并避免克隆-只有在不修改原始
ActiveQuery
对象的情况下修改克隆查询时才有意义。

两者都执行相同数量的查询。