site patterns instalar drupal7 drupal-7 drupal-commerce

drupal-7 - patterns - token drupal7



Hacer que todos los productos sean propiedad de un usuario (1)

Estoy usando Drupal 7 y el módulo de Commerce.

Estoy tratando de advertir al usuario cada vez que agreguen al carrito un producto que ya poseen. Obtener una lista de los productos que ya posee el usuario (en código PHP) parece ser todo un desafío, ya que la conexión entre el artículo de línea y un producto está en una burbuja serializada.

Tengo, como argumentos, una lista de productos actualmente en el carrito y el usuario.

Si voy por el camino de EntityFieldQuery, puedo obtener fácilmente todas las líneas de productos correspondientes, pero no puedo extender la consulta para filtrar solo las órdenes completadas por el usuario dado. (¿O puedo? Eso sería genial.)

Si tomo el camino de db_select, puedo obtener fácilmente todos los pedidos completados para el usuario dado, pero no puedo cerrar la conexión del Artículo de línea <-> Producto.

Cualquier ayuda será apreciada.


Bueno, aquí está la respuesta en caso de que alguien más esté interesado:

Aparentemente hay una tabla llamada "field_data_commerce_product", que tiene una columna "entity_id" para el ID del artículo de línea y una columna "commerce_product_product_id" para el ID del producto. Esta tabla permite a db_select conectar fácilmente pedidos, líneas de pedido y productos para lograr el tipo de consulta sobre la que pregunté.

Aquí está la consulta completa:

<?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(); ?>

Esto devolverá todos los ID de productos que ya posea el usuario dado.