我正在建立一个商业网站,我一直在研究不同的方式来展示具有变体的产品。我正在尝试为隐形眼镜做这件事,并想知道最好的方法是什么。
产品可以是简单的,例如镜片盒或没有变体的镜片解决方案,或者在隐形眼镜的情况下,每个镜片最多可以有三种可配置的变体,具体取决于镜片,用于处方(例如功率,基本曲线,直径)。
在我的结构中,我将简单的产品作为产品,没有父母。隐形眼镜将作为产品存储,每个变体将作为引用其父级的单独产品存储,变体本身将使用products_variants表进行链接。
我的结构如下:
products
- id
- parent_id
- name
- price
- type_id
- brand_id
type
- id
- name
brand
- id
- name
product_variant_group
- id
- name
product_variant_value
- id
- product_variant_group_id
- value
products_variants (isCrossRef = true for Propel relationships)
- id
- product_id
- product_variant_value_id
我的代码已经很慢了,我甚至没有开始构建选择框来选择处方。
public function getPossibleVariants($productId)
{
$product = ProductQuery::create()->findPk($productId);
$children = $product->getChildren();
$options = array();
foreach ($children as $child) {
if ($child->countProductsVariantss()) {
$variants = $child->getProductVariantValues();
foreach ($variants as $variant) {
$group = $variant->getProductVariantGroup();
$options[$group->getName()][] = $variant->getValue();
}
}
}
ksort($options);
return $options;
}
我正在使用propel和Zend Framework。我是以正确的方式来做这件事的吗?大多数人需要两种相同的镜片类型,但每只眼睛的处方不同。我该如何实现呢?
我已经尝试过查看其他系统,例如magento和oscommerce。前者让我困惑,我发现后者的代码很乱。由于这是一次学习经历,我想以最好的方式做事。
由于
答案 0 :(得分:3)
最好将一个表用于所有产品和产品变体。这样基于产品的操作变得更容易。最终,变体只是一种产品。
所以我建议。
products
- id
- parent_id
- name
- price
- type_id
- brand_id
- variant_id
附加字段variant_id应引用变体组。
这种方式更简单。您可以根据变体组ID检索所有变体。
我玩过亚马逊产品api很多。他们的方法类似于此。