मुझे कम कोड पसंद है केक मॉडल/टेबल नामकरण परंपरा के साथ (डीबी टेबल products
- मॉडल का नाम products
, डीबी टेबल prices
- मॉडल का नाम Price
) आगे परियोजना प्रबंधन के लिए। ऐसा लगता है कि आप यह करना चाहते हैं:
$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
),
));
लेकिन अगर आप के साथ उत्पाद get प्राप्त करना चाहते हैं आपके सभी मानदंड (कंपनी और कीमत) केवल , आपको 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
get मिलता है कंपनियों और इस उत्पादों के लिए कीमतें।
आशा है कि यह मदद करता है।