これはばかげているように聞こえますが、それは正当な(つまり過剰に設計された)原因のためであると私を信じてください。
テーブルについて何も知らなくても、そのテーブル内のすべてを選択するIN句を使用してSQLクエリを作成することは可能ですか?これは、テーブルを参照するサブクエリを使用できないことを意味することに注意してください。
つまり、次のクエリで「SOMETHING」を置き換えるステートメントを見つけたいと思います。
SELECT * FROM table_a WHERE table_a.id IN (SOMETHING)
結果が次のようになります。
SELECT * FROM table_a
「SOMETHING」の値を変更する以外に何もしないことによって
好奇心を満たすために、質問の理由を共有します。
1)2つのテンプレートメソッドgetData()とload()を使用して、ファクトリメソッドの魔法を拡張するすべてのモデルに付与するFactoryObject抽象クラスがあります。
2)モデルはテンプレートメソッドを実装する必要があります。getDataは、ID制約を受け入れ、データベースから行をプルし、連想配列のセットを返す静的メソッドです。loadは静的ではなく、連想配列を受け入れ、その配列に基づいてオブジェクトにデータを入力します。
3)FactoryObjectの非抽象部分は、getObject()およびgetObjects()メソッドを実装します。これらはgetDataを呼び出し、オブジェクトを作成し、getDataからの配列応答をloads()して、入力されたオブジェクトを作成して返します。
getObjects()は、リスト形式またはサブクエリ形式のいずれかの入力としてID制約を必要とし、これらはgetData()に渡されます。ID制約なしで渡して、すべてのオブジェクトを取得できるようにしたかったのです。
問題は、モデルだけがテーブルについて知っていることです。getObjects()はより高いレベルで実装されているため、INにユニバーサルな「すべてを返す」句がない限り、getData()を渡すものがわかりません。
他の解決策があります。APIを変更して、getDataが特別なパラメーターを受け入れてすべてを返すように要求するか、次を呼び出す静的getAll [ModelName] s()メソッドをモデルレベルで実装できます。
static function getAllModelObjects() {
return getObjects("select [model].id from [model]");
}
これは合理的で、とにかくアーキテクチャに適合するかもしれませんが、私は興味があったので、私が尋ねると思いました!