2012-04-12 8 views
1

Propelのカスタム条件

SELECT * 
FROM mytable 
WHERE facility_id IN (4,7) 
GROUP BY housing_id 
HAVING COUNT(DISTINCT facility_id) = 2; 

Propelの基準:

$criteria->add(HousingsHousingFacilitiesPeer::HOUSING_FACILITY_ID, $facility_filter, Criteria::IN); 

$criteria->addGroupByColumn(HousingsHousingFacilitiesPeer::HOUSING_ID); 

$criteria->addHaving(
    $criteria->getNewCriterion(
    HousingsHousingFacilitiesPeer::HOUSING_ID, 
    'COUNT(DISTINCT housings_housing_facilities.HOUSING_FACILITY_ID) = 2', 
    Criteria::CUSTOM 
) 
); 

しかし、クエリは、純収益結果をすべて行います。

私は正しくカスタム基準を使用していますか?最初のチェックで

答えて

1

、あなたのcount distinctは間違っているようだ:

'COUNT(DISTINCT HousingsHousingFacilitiesPeer::HOUSING_FACILITY_ID) = 2' 

それはthis snippetについて、ちょうど悪いC/Pなら、あなたが行う可能性があります:

$c = new Criteria(); 
$c->add(HousingsHousingFacilitiesPeer::HOUSING_FACILITY_ID, $facility_filter, Criteria::IN); 
$c->addGroupByColumn(HousingsHousingFacilitiesPeer::HOUSING_ID); 
$c->addAsColumn('numFacilities', 'COUNT(DISTINCT '.HousingsHousingFacilitiesPeer::HOUSING_FACILITY_ID.')'); 
$c->addHaving($c->getNewCriterion(HousingsHousingFacilitiesPeer::ID, 'numArticles=2', Criteria::CUSTOM));