如果我保存這樣我的產品:PHP:高效的方式來使用對象作爲產品數據庫
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 - 以設置錯誤級別或排序標誌的方式傳遞一組位圖標誌:'$ product = ProductFactory :: get($ product_id,FETCH_NAME | FETCH_PRICES);' –
Mark有正確的願景。 @MarkBaker,你爲什麼要發表評論?解決問題的最佳方法是使用位掩碼。 –
@Michael - 主要是因爲我認爲,如果我可以用比tweet更少的字符回答問題,它只能作爲評論 –