У меня была проблема с методом Doctrine_Table::find()
, так как это thorowing исключение SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Является ли метод Doctrine_Table :: find() устаревшим?
Я решил проблему с помощью Doctrine::getTable('City')->findOneById($id);
вместо и она отлично работает.
Когда я попытался просмотреть информацию о проблеме, я был удивлен, так как нет документации о методе Doctrine_Table::find()
в official website.
Любой знает, в чем проблема? это устарело? Кстати, он существует на самом коде! версии (1.2.1).
подробнее о базе данных:
CREATE TABLE IF NOT EXISTS `country` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(64) NOT NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `city` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(64) NOT NULL ,
`country_id` INT NOT NULL ,
PRIMARY KEY (`id`, `country_id`) ,
INDEX `fk_city_country` (`country_id` ASC) ,
CONSTRAINT `fk_city_country`
FOREIGN KEY (`country_id`)
REFERENCES `country` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
Что странно, что оба Doctrine_Table::find()
и Doctrine_Table::findOneById()
отлично работает на Country
столе !.
PS: Я понимаю, что Doctrine_Table::findOneById()
- это __call()
сгенерированный метод. И это заставляет меня запутаться больше, почему фактический метод find()
не может вести себя так, как ожидалось (это мое ожидание неправильно или что)!
Спасибо :), я думал, что это причина, но это не имело смысла для меня ... даже сейчас !. Так или иначе, это вещь для дизайна. Поэтому я могу использовать 'Doctrine :: getTable ('City') -> findOneById (1)' без проблем :). –
Я понял! Я ошибся при разработке базы данных в первую очередь !. Извините БД нет. Я не должен устанавливать внешний ключ как основной ... –