Получение всех продуктов, принадлежащих пользователю - PullRequest
2 голосов
/ 16 ноября 2011

Я использую Drupal 7 и модуль Commerce.

Я пытаюсь предупредить пользователя всякий раз, когда он добавляет в корзину продукт, которым он уже владеет.Получение списка продуктов, уже принадлежащих пользователю (в коде PHP), кажется довольно сложной задачей, потому что связь между Элементом Позиции и Продуктом находится в сериализованном блобе.

В качестве аргументов у меня есть списоктовары в корзине и пользователь.

Если я пойду по пути EntityFieldQuery, я могу легко получить все позиции, относящиеся к данным товарам, но не могу расширить запрос, чтобы отфильтровать только выполненные заказы.данным пользователем.(Или я могу? Это было бы здорово.)

Если я пойду по пути db_select, я могу легко получить все выполненные заказы для данного пользователя, но я не могу соединить позицию <-> Продуктсоединение.

Любая помощь будет оценена.

1 Ответ

3 голосов
/ 19 ноября 2011

Хорошо, вот ответ, если кому-то еще это интересно:

Очевидно, есть таблица с именем "field_data_commerce_product", в которой есть столбец "entity_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();
?>

Это вернет все идентификаторы Продукта.уже принадлежит данному пользователю.

...