2

会社、製品、価格の 3 つのテーブルがあります。

Companies hasMany Products
Products hasMany Prices

現在、これらのテーブルで特定の価格未満の製品を検索しようとしています。試しているコードは次のとおりです。

$results = $this->Product->find('all', array(
    'conditions' => array(
        'Price.price <=' 10
    )
));

何らかの理由で、このコード cakephp を使用すると、エラーが返されます。

Unknown column 'Price.price' in 'where clause'

これは、製品に複数の価格があるためだと思います (価格テーブルではなく、会社のテーブルに参加しています)。

:これを機能させた後、価格表と製品表の基準に基づいて製品を検索し、3 つすべてのデータを結果ページに表示できるようにしたいと考えています。

最初に価格表を検索してから製品表を検索することを考えましたが、もっと効率的な方法があるはずではないでしょうか?

4

2 に答える 2

3

これらのタイプのクエリにはアドホック結合を使用できます。Cake は 1:n または n:n 関係の結合を行わないため、手動で指定する必要があります。

$results = $this->Product->find('all', array(
    'joins' => array(
        array(
            'alias' => 'Price',
            'table' => 'prices',
            'foreignKey' => false,
            'conditions' => array('Price.product_id = Product.id'),
        ),
    ),
    'conditions' => array(
        'Price.price <=' => 10,
    ),
));
于 2012-09-20T22:19:35.947 に答える
2

あなたの代わりに私はこれをします:

$results = $this->Product->Price->find('all', array(
    'recursive' => 2,
    'conditions' => array(
        'Price.price <=' => 10
    )
));

HasMany はテーブルに参加しませんが、begsTo は参加します。

于 2012-09-20T22:30:34.883 に答える