【问题标题】:Getting all products owned by a user获取用户拥有的所有产品
【发布时间】:2011-11-16 07:33:16
【问题描述】:

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

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: drupal-7 drupal-commerce


    【解决方案1】:

    好吧,如果其他人有兴趣,以下是答案:

    显然有一个名为“field_data_commerce_product”的表,其中有一个“entity_id”列用于订单项 ID,“commerce_product_product_id”列用于产品 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。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多