[英]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.