2

Drupal7とCommerceモジュールを使用しています。

すでに所有している商品をカートに追加するたびに、ユーザーに警告しようとしています。Line ItemとProductの間の接続はシリアル化されたブロブにあるため、ユーザーがすでに所有している製品のリストを(PHPコードで)取得することは非常に難しいようです。

引数として、現在カートに入っている製品のリストとユーザーがいます。

EntityFieldQueryを使用すると、特定の商品に関連するすべての広告申込情報を簡単に取得できますが、特定のユーザーによる完了した注文のみをフィルタリングするようにクエリを拡張することはできません。(または私はできますか?それは素晴らしいことです。)

db_selectを使用すると、特定のユーザーのすべての完了した注文を簡単に取得できますが、ラインアイテム<->製品の接続をブリッジできません。

どんな助けでもありがたいです。

4

1 に答える 1

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が返されます。

于 2011-11-19T08:36:35.320 に答える