1

私はdoctrine 1.2を使用しています。これが私のスキーマです:

ProviderProduct:
 columns:
   provider_id: 
     type: integer
     primary: true
   product_id:
     type: integer
     primary: true
   num:
     type: integer
     default: 0
     unsigned: true
Provider: 
 columns:
   name: {type: string(255), notnull: true, notblank: true, unique: true}
 relations:
   Products:
     class: Product
     local: provider_id
     foreign: product_id
     refClass: ProviderProduct
Product:
 columns:
    #a lot of columns
 relations:
   Providers:
     class: Provider
     local: product_id
     foreign: provider_id
     refClass: ProviderProduct

私が欲しいのは、特定のプロバイダーの最大数 (これは金額) の製品を取得することです。私はこのクエリを試しました:

$query = Doctrine_Query::create()->select('p.*')
                                     ->from('Product p')
                                     ->innerJoin('p.Providers pr')
                                     ->where('pr.name = ?', 'WhiteStore')
                                     ->orderBy('ProviderProduct.num');
$query->fetchOne();

結果のSQLクエリ:

SELECT p.* FROM product p 
INNER JOIN provider_product p3 ON (p.id = p3.product_id) 
INNER JOIN provider p2 ON p2.id = p3.provider_id, provider_product p4 
WHERE (p2.name = ?) ORDER BY p4.num

ご覧のとおり、数値フィールドで並べ替えられていません。では、私のタスクに適した dql は何ですか?

4

2 に答える 2

0

多対多関係のドクトリンクエリの順序は?

次の構造を使用できます。

$query = Doctrine_Query::create()->select('p.*')
->from('Product p')
->innerJoin('p.Providers pr')
->where('pr.name = ?', 'WhiteStore')
->orderBy('p.Providers.ProviderProduct.num');

Doctrine 1 の非ネイティブな動作は、多対多の関係に対して目に見えないエイリアスを作成することです。このエイリアスを使用して、正しい順序を構築できます。

于 2016-11-02T10:22:32.703 に答える