2011-08-05 9 views
1

私は2つのモデルの製品とオファーを持っています。製品には1つのオファーがあります。モデルはバインドされていますProduct hasOne Offerと重複する製品を避けるにはどうすればよいですか?

//Product model: 
hasOne 
    Offer 
    foreignKey => false 
    conditions => array(Product.productnumber = Offer.productnumber) // Just normal fields 

//Offer model: 
belongsTo 
    Product 

Offer.productnumberとOffer.priceが異なる複数のオファーがあります。私がしたいことは、最も安いOffer.priceで提供されるオファーが1つだけであるように、すべての製品を見つけることです。しかし、今私がそれをやろうとすると、同じ商品番号のオファーと同じくらい多くの重複商品が得られます。これを避ける方法は?

私もこれを見てきました:hasMany reduced to hasOne in CakePHPしかし、運搬できない運がありません。

別々の配列を取得し、それらを「手動で」組み合わせることは(最も簡単な)オプションですか?

答えて

1

商品が多数います。製品hasMany LowestOfferに、価格ASCおよび制限=> 1句でソートされた関係条件配列の注文句が含まれています。

次に、一番安いオファーがほしいと思っているときにはContainableで見つけて、LowestOfferを元に戻してください。

+0

これはうまくいくと思います。それでも私は2つの別々の配列を取得し、それらを手動で組み合わせました。私はあなたの努力に感謝します。 – Henri

1

1つの製品に多くのオファーが必要な場合は、hasManyを使用する必要があります。製品hasManyが提供しています。

モデルの関係をモデル化する方法です。あなたのお店に1冊の本があり、それが1つのオファーしか持てない場合は、それについて考えてみてください。意味がありません。

SELECT p.id FROM products p JOIN offers o ON(p.id=o.product_id) WHERE p.id IN (
    SELECT oo.product_id FROM offers oo GROUP BY oo.product_id WHERE SUM(oo.product_id)=1 
) 

Model::find()構文でそれを配置しようとすると、または単にModel::query()メソッドを使用します。

[OK]を、今、ちょうど1申し出を持っているすべての書籍を取得するには、私はちょうどこのような何かを考えることができます。

EDIT:

あなたは大きな価格で提供したい場合。

SELECT p.id FROM products p JOIN offers o ON(p.id=o.product_id) WHERE p.id IN (
    SELECT oo.product_id FROM offers oo GROUP BY oo.product_id WHERE OO.id = MAX(oo.price) 
) 
+0

あなたはあなたの答えです。私はその関係をモデル化しない理由があります。私はcsvからoffer-tableを取り込み、私はテーブルに保存するすべてのオファーについてProduct.idを探したくありません。そして、私はすべての製品を欲しがっているし、同じ製品番号のオファーがあるなら、それもまた、最も安い価格のものだけを望む。そして、私は$ this-> Model-> query()を使わないほうがいいです。 – Henri

+0

アンリは分かりません。それは意味がありません。つまり、テーブルをどのように埋めるのかを超えて、関係があります。あなたの製品がただ一つのオファーを持っているなら、あなたは間違ったことをしています。技術からの賛同をモデル化しようとはしないでください。また、合理化に合うようにテクノロジーをモデル化してください。 – santiagobasulto

+0

さて、もし商品がhasManyであれば、商品 - >検索( 'すべて')はすべて同じ商品番号の商品を返します。しかし、それから、見つけた後に不必要な提供を解除するために、foreachループをいくつか構築する必要があります。それもかなり良い解決策です。ありがとう。しかし、どのようにして、その配列をhasOne findの後に見えるようにするか? '$ products [0] [Offer] - > $ products [Offer]' – Henri