方法Doctrine_Table :: find()是否已弃用?

时间:2010-01-07 16:17:45

标签: php mysql doctrine foreign-keys

我遇到了方法Doctrine_Table::find()的问题,因为它是一个例外 SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

我通过使用Doctrine::getTable('City')->findOneById($id);来解决问题,但效果很好。

当我试图隐瞒这个问题时,我很惊讶,因为official website中没有关于方法Doctrine_Table::find()的文档。

任何人都知道问题是什么?它被弃用了吗? BTW它存在于实际代码中!版本(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 :(得分:0)

从v 1.2.1开始,Doctrine_Table :: find()被 NOT 弃用 您可以查看http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview#table:finder-methods

上的官方文档

对于“无效参数号”错误,这意味着您查询的参数多于或少于预期,大多数情况下您使用了令牌(?)并忘记将参数添加到其中

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

我使用的示例有两个令牌'?',但只有一个参数'jonh',它会抛出相同的错误:“参数号无效:绑定变量数与令牌数不匹配”

答案 1 :(得分:0)

哦,我的坏。我之前没有看到它,对我感到羞耻= p

您的表有两个主键(id和country_id),因此find方法要求您将两个参数传递给find方法。

您可以使用魔术方法:

Doctrine::getTable('City')->findOneById(1)