0

顧客モデル、マーチャント モデル、およびトランザクション モデルがあります。顧客はマーチャントに対して取引を行うことができ、マーチャントは顧客に対しても取引を行うことができます。最終的に、次のようなクエリを実行したいと思います。

  1. お客様が行うすべての取引
  2. マーチャントが行うすべての取引
  3. 顧客 X からマーチャント Y へのすべてのトランザクション (およびその逆)
  4. オプション: 最初に特定のタグを持つすべてのトランザクションを終了し、次にそれらのトランザクションに関連するすべての関連する販売者と顧客を見つけます。これは便利な機能ですが、複雑すぎて回答で説明できない場合でも、心配する必要はありません。

では、概念的には、これらの各モデルの関連付けをどのように作成すればよいでしょうか? Customers のように has_many :merchants を介して: :transactions (およびその逆)? またはポリモーフィックな関連付けを使用しますか? などなど

助けてくれてありがとう!!!

4

2 に答える 2

2

OK、@infused の提案は良さそうです。これはActiveJDBCでも同じです

最初にモデルを定義します。

public class Customer extends Model {}
public class Merchant extends Model {}
public class Transaction extends Model {}

次に、テーブルを作成します。

顧客:

id | first_name | last_name | etc

商人:

id | name | address1 | etc

取引:

id | customer_id | merchant_id | tag | etc

顧客のすべてのトランザクションを見つける:

customer.getAll(Transaction.class);

マーチャントのすべてのトランザクションを検索するには:

merchant.getAll(Transaction.class);

マーチャント #25 の顧客 #1 のトランザクションをすべて検索します。

customer = Customer.findById(1);
customer.get(Transaction.class, "merchant_id = ?", 25);

顧客 #8 に対する業者 #1 のすべてのトランザクションを見つける

 merchant = Merchant.findById(1);
 merchant.get(Transaction.class, "customer_id = ?", 8);

タグですべてのトランザクションを検索します (タグが文字列フィールドであると仮定します):

transactions = Transaction.where("tag = ?", "best-seller");

'best-seller' でタグ付けされたトランザクションを持つすべてのマーチャントを検索:

transactions = Transaction.where("tag = 'best-seller'").include(Merchant.class);
//iterate over transactions, and get a merchants:
transactions.get(i).getAll(Merchant.class)

このアプローチは 2 つの SQL クエリのみを実行し、非常に高速です。

これが役立つことを願っています

于 2014-08-02T05:17:22.000 に答える