3

製品を次のように保管した場合:

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);

これを行う一般的な方法はありますか?これを行う効率的な方法は?私はこのようなことをしたことがなく、これらは私の頭の上からです。

今後のご意見をお寄せいただきありがとうございます。

4

2 に答える 2