获取用户拥有的所有产品

时间:2011-11-16 07:33:16

标签: drupal-7 drupal-commerce

我正在使用Drupal 7和Commerce模块。

我试图警告用户,只要他们将已经拥有的产品添加到购物车中。获取用户已拥有的产品列表(在PHP代码中)似乎是一个挑战,因为行项目和产品之间的连接是序列化的blob。

作为参数,我有购物车中当前产品和用户的列表。

如果我采用EntityFieldQuery的方式,我可以轻松获取与给定产品相关的所有订单项,但我无法扩展查询以仅过滤给定用户的已完成订单。 (或者我可以吗?那会很棒。)

如果我采用db_select的方式,我可以轻松获得给定用户的所有已完成订单,但我无法桥接订单项< - >产品连接。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

嗯,这是其他人感兴趣的答案:

显然有一个名为“field_data_commerce_product”的表格,其中包含行项目ID的“entity_id”列和产品ID的“commerce_product_product_id”列。此表允许db_select轻松连接订单,行项目和产品,以实现我询问的那种查询。

这是完整的查询:

<?php
  // Assuming we have $user populated with the user's ID:
  $query = db_select('commerce_order', 'cord');
  $query->join('commerce_line_item', 'li', 'cord.order_id = li.order_id');
  $query->join('field_data_commerce_product', 'prod', 'li.line_item_id = prod.entity_id');
  $query->condition('cord.uid', $user, '=')
        ->condition('cord.status', 'completed', '=')
        ->fields('prod', array('commerce_product_product_id'));
  $result = $query->execute();
?>

这将返回给定用户已拥有的所有产品ID。

相关问题