製品を次のように保管した場合:
tbl_products
id, price, stock
1, 20, 5
2, 30, 5
テキストは別のテーブルにあります。
tbl_texts
id, item_id, type, field, value
1, 1, 'product', 'name', 'Programming Book'
2, 1, 'product', 'description', 'A fine book'
3, 2, 'product', 'name', 'Bicycle'
4, 2, 'product', 'description', 'Goes very fast'
また、キャンペーン価格も別の表にあります。
tbl_product_campaign_prices
id, item_id, price, valid_from, valid_to
1, 1, 5, null, null
2, 2, 10, null, 2014-10-10
さて、私の架空のテーブルがあります。
製品をオブジェクトとして扱いたいのですが、製品に関連するすべてのデータを常に取得したいわけではないため、データベースが重く、すべてにアクセスする必要はほとんどありません。
たとえば、製品の名前や説明だけが必要な場合があります。時々、キャンペーン価格が必要です。tbl_products のベース情報は常に取得されます。
本当の問題は次のとおりです。コードに関する私のオプションは何ですか。私はいくつか思いついた:
1.
$product_id = 1;
$fetch_name = 1;
$fetch_description = 0;
$fetch_campaign_prices = 0;
$product = ProductFactory::get($product_id, $fetch_name, $fetch_description,
$fetch_campaign_prices);
// This takes a lot of space and is very impractical
// when I have to add new data to be fetched.
// Worst case would be having to add a bunch
// of null, null, null to get the last data.
2.
// Same as 1. but adding all the $fetch_ into an array and only use 2 parameters on the
// get() function.
$product = ProductFactory::get($product_id, $fetch_array);
// Still pretty ackward way to fetch data but much easier to add stuff
// since I don't have to add any new parameters
3.
$data_to_fetch = array('name', 'description');
ProductFactory::Prepare($data_to_fetch);
$product = ProductFactory::get($product_id);
これを行う一般的な方法はありますか?これを行う効率的な方法は?私はこのようなことをしたことがなく、これらは私の頭の上からです。
今後のご意見をお寄せいただきありがとうございます。