私のアプリケーションでは、非常に大規模で複雑な SQL クエリをいくつか使用しています。これらを使用するクラスにこれらを入れたくありません。クラスにそれらを格納し、アプリがそのクラスの変数Queries
として使用するさまざまなクエリを設定します。const
そして、他のクラスでは、クエリを として呼び出しますDb::query(Queries::queryID, array($parameter))
。これにより、乱雑なクエリが別の場所に保管され、労働者階級が整理されます。複数のクラスで使用されるクエリがいくつかあるため、これは繰り返しを抑えるのにも役立ちます。
例:
abstract class Queries {
const queryID = <<<'SQL'
SELECT t.typeID, t.typeName, ROUND(greatest(0,sum(t.quantity)) * (1 + (b.wasteFactor / 100))) * ? AS quantity
FROM
(SELECT invTypes.typeid typeID, invTypes.typeName typeName, quantity
FROM invTypes, invTypeMaterials, invBlueprintTypes
WHERE invTypeMaterials.materialTypeID = invTypes.typeID AND
invBlueprintTypes.productTypeID = invTypeMaterials.typeID AND
invTypeMaterials.TypeID = ?
UNION
SELECT invTypes.typeid typeid, invTypes.typeName name, invTypeMaterials.quantity * r.quantity * - 1 quantity
FROM invTypes, invTypeMaterials, ramTypeRequirements r, invBlueprintTypes bt
WHERE invTypeMaterials.materialTypeID=invTypes.typeID AND
invTypeMaterials.TypeID =r.requiredTypeID AND
r.typeID = bt.blueprintTypeID AND
r.activityID = 1 AND
bt.productTypeID = ? AND
r.recycle = 1
) t
INNER JOIN invBlueprintTypes b ON (b.productTypeID = ?)
GROUP BY t.typeid, t.typeName
SQL;
...
}
これはほとんどの場合うまく機能していますが、このようにクエリを労働者階級から分離することについて他の人の意見を知りたいと思いました。より良い方法はありますか?私はこれを細かく管理していますか?