コードを少なくしたい ケーキモデル/テーブルの命名規則(db table products
-モデル名Product
、dbtableprices
-モデル名prices
)さらなるプロジェクト管理のため。あなたがやりたいようです:
$results = $this->Product->find('all', array(
'fields' => array(
'Company.name',
'Product.feature',
'Price.price'
),
'joins' => array(
'LEFT JOIN companies AS Company ON Product.company_id = Company.id
LEFT JOIN prices AS Price ON Product.id = Price.product_id'
),
'conditions' => array(
'Company.name LIKE' => '%'.$search_term.'%',
'Product.feature' => $product_feature,
'Price.price <' => $price
),
));
しかしもし 製品を入手したい すべての基準 (会社と価格)のみ 、INNER JOIN
を使用する必要があります 、およびGROUP BY
製品(group
オプション)。
また、多くの価格と会社の結果を含むすべての製品を取得し、モデルリレーションを設定/リンクする場合は、contain
を使用できます。 次のようなオプション:
$contain = array(
'Company' => array(
// ...
'conditions' => array('Company.name LIKE' => '%'.$search_term.'%'),
// ...
),
'Price' => array(
// you can set: 'fields' => array('id', ...),
'conditions' => array('Price.price <' => $price),
// you can set order: 'ordder' => '....'
)
);
$this->Product->attach('Containable');
$post = $this->Product->find('all', array(
// ...
'contain' => $contain,
'conditions' => array('Product.feature' => $product_feature),
// ...
));
したがって、feature => $product_feautre
のすべての製品を取得できます 、およびLEFT JOIN
を取得します この製品の会社と価格。
これがお役に立てば幸いです。