Является ли метод Doctrine_Table :: find () устаревшим? - PullRequest
0 голосов
/ 07 января 2010

У меня была проблема с методом Doctrine_Table::find(), так как он использует исключение SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Я решил проблему с помощью Doctrine::getTable('City')->findOneById($id);, и она отлично работает.

Когда я пытался выяснить проблему, я был удивлен, поскольку на официальном сайте .

нет документации о методе Doctrine_Table::find().

Кто-нибудь знает, в чем проблема? это устарело? Кстати, это существует на самом коде! версии (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() не может вести себя так, как ожидалось (мои ожидания неверны или что)!

Ответы [ 2 ]

0 голосов
/ 11 января 2010

О, мой плохой. Я раньше этого не видел, позор мне = p

Ваша таблица имеет два первичных ключа (id и country_id), поэтому метод find требует, чтобы вы передали оба параметра в метод find.

Вместо этого вы можете использовать магические методы:

Doctrine::getTable('City')->findOneById(1)
0 голосов
/ 09 января 2010

Начиная с версии 1.2.1, Doctrine_Table :: find () равно НЕ устарело Вы можете проверить официальную документацию по http://www.doctrine -project.org / documents / manual / 1_2 / ru / component-Overview # таблица: методы поиска

Что касается ошибки «неверный номер параметра», это означает, что в вашем запросе больше или меньше параметров, чем ожидалось, чаще всего вы использовали токен (?) И забыли добавить параметр к нему

Doctrine_Query::create()
->from('User u')
->where('u.name = ?', 'Jonh')
->andWhere('u.is_active = ?')

В примере, который я использовал, есть два токена '?', Но только один параметр 'jonh', он выдает ту же ошибку: «Недопустимый номер параметра: число связанных переменных не соответствует количеству токенов»

...