【发布时间】:2013-10-07 13:14:18
【问题描述】:
如果我的产品是这样存储的:
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); -
马克有正确的愿景。 @MarkBaker,您为什么将其发布为评论?解决问题的最佳方法是使用位掩码。
-
@Michael - 主要是因为我认为,如果我能用比推文更少的字符来回答,那它只配成为评论
-
也许您可以开始回答...有人会编辑您的答案(通过添加更多信息)...其他人会再次编辑,这将是解决问题的最佳实践的社区回答。
标签: php mysql database oop object