Tôi thích ít mã hơn với mẫu bánh / quy ước đặt tên bảng (db table products
- tên kiểu máy Product
, bảng db prices
- tên kiểu máy Price
) để quản lý dự án thêm. Có vẻ như Bạn muốn làm:
$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
),
));
nhưng nếu Bạn muốn nhận sản phẩm với tất cả các tiêu chí của bạn (công ty và giá cả) chỉ , Bạn nên sử dụng INNER JOIN
và GROUP BY
Sản phẩm (group
tùy chọn).
Ngoài ra, nếu Bạn muốn nhận được tất cả các sản phẩm với nhiều mức giá và kết quả của công ty và Bạn thiết lập / liên kết quan hệ mô hình, Bạn có thể sử dụng contain
tùy chọn, như:
$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),
// ...
));
Vì vậy, Bạn sẽ nhận được tất cả các sản phẩm có feature => $product_feautre
và Bạn nhận được LEFT JOIN
công ty và giá cả của sản phẩm này.
Hy vọng điều này sẽ hữu ích.