2

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

每当用户将他们已经拥有的产品添加到购物车时,我都会尝试警告用户。获取用户已经拥有的产品列表(在 PHP 代码中)似乎是一个很大的挑战,因为 Line Item 和 Product 之间的连接是在一个序列化的 blob 中。

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

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

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

任何帮助将不胜感激。

4

1 回答 1

3

好吧,如果其他人感兴趣,这是答案:

显然,有一个名为“field_data_commerce_product”的表,其中有一个用于 Line Item ID 的“entity_id”列,以及一个用于 Product ID 的“commerce_product_product_id”列。该表允许 db_select 轻松连接 Orders、Line Items 和 Products 以实现我询问的那种查询。

这是完整的查询:

<?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。

于 2011-11-19T08:36:35.320 回答