繁体   English   中英

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

[英]Is the method Doctrine_Table::find() deprecated?

我的方法Doctrine_Table::find()遇到问题,因为它抛出了SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens的异常SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

我通过使用Doctrine::getTable('City')->findOneById($id);解决了问题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()方法不能达到预期的效果(我的预期是错误的还是什么)!

从1.2.1版开始, 不建议使用Doctrine_Table :: find()。您可以在http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview#table:finder中查看官方文档-方法

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

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

我使用的示例有两个标记'?',但是只有一个参数'jonh',它将引发相同的错误:“无效的参数编号:绑定变量的数量与标记的数量不匹配”

天哪 我没看过,可耻的是我= p

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

您可以改用魔术方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM