Я пытаюсь выполнить следующий запрос, используя Doctrine 1 с symfony 1.4, но он говорит Couldn't find class (SELECT
с 500 Internal Error. Есть ли способ заставить его работать с Doctrine:
SELECT location_id FROM
(SELECT DISTINCT location_id FROM location_feature_restriction WHERE feature_restriction_id IN(4,15,16)) as t1
WHERE location_id
NOT IN(SELECT DISTINCT location_id FROM location_feature_restriction WHERE feature_restriction_id = 5);
В настоящее время у меня так, но оно не работает:
/**
* Search for venues with selected features
* @param Doctrine_Query $qry The SQL query
* @param array $values The form values
*/
protected function addSearchFeatures(Doctrine_Query $qry, array $values = array()) {
// "Dry" and "Bespoke Hire" options
$qryParams = array();
$qryParts = array();
if (in_array("bespoke_hire", $values["features"]) && $values["features"][array_search("bespoke_hire", $values["features"])]) {
$qryParts[] = "q.bespoke_hire = :BESPOKE_HIRE";
$qryParams["BESPOKE_HIRE"] = 1;
unset($values["features"][array_search("bespoke_hire", $values["features"])]);
}
if (array_key_exists("dry_hire", $values["features"]) && $values["features"][array_search("dry_hire", $values["features"])]) {
$qryParts[] = "q.dry_hire = :DRY_HIRE";
$qryParams["DRY_HIRE"] = 1;
$values["features"][array_search("dry_hire", $values["features"])];
}
if (count($qryParts)) {
$qry->andWhere(implode(" OR ", $qryParts), $qryParams);
}
// Search for selected features
if (count($values["features"])) {
// If anyone need to features should be searched using the OR condition then comment having condtion from following line.
if ($values["no_noise_restrictions"]) {
$subSql = "SELECT location_id FROM
(SELECT DISTINCT location_id FROM LocationFeatureRestriction WHERE feature_restriction_id IN(".implode(',', $values["features"]).")) as t1
WHERE location_id
NOT IN(SELECT DISTINCT location_id FROM LocationFeatureRestriction WHERE feature_restriction_id = 5)";
} else {
$subSql = "SELECT LocationFeatureRestriction.location_id
FROM LocationFeatureRestriction
WHERE feature_restriction_id IN(".implode(',', $values["features"]).")
GROUP BY location_id
HAVING COUNT(DISTINCT feature_restriction_id) = ".count($values['features']);
}
$qry->andWhere('q.id IN ('.$subSql.')');
}
}
Ошибка доктрины:
UPDATE:
Я упростил запрос до следующего, но тогда он выдавал ошибку Couldn't get short alias for
:
SELECT DISTINCT location_id FROM location_feature_restriction
WHERE location_id NOT IN
(SELECT DISTINCT location_id FROM location_feature_restriction
WHERE feature_restriction_id = 5);
Затем он добавил псевдоним для таблицы, но теперь выдает ошибку Couldn't find class featureTable
:
SELECT DISTINCT location_id FROM location_feature_restriction
WHERE location_id NOT IN
(SELECT DISTINCT location_id FROM location_feature_restriction AS featureTable
WHERE featureTable.feature_restriction_id = 5);