2010-01-07 90 views
0

我有一個問題,該方法Doctrine_Table::find(),因爲它thorowing的 SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokensDoctrine_Table :: find()方法是否被棄用?

例外,我通過使用Doctrine::getTable('City')->findOneById($id);而不是解決了這個問題,它工作正常。

當我試圖回想起這個問題時,我很驚訝,因爲沒有關於official website中的方法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()方法不能像預期的那樣行事(我的期望是錯誤的還是什麼)!

回答

0

哦,我的壞。我沒有看到它早些時候,對我很丟臉= p

您的表有兩個主鍵(id和country_id),所以find方法要求您將兩個參數都傳遞給find方法。

你也可以使用的魔術方法:

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

謝謝:),我認爲這是原因,但它對我沒有意義......即使是現在! 無論如何,這是一個設計的事情。所以我可以使用'Doctrine :: getTable('City') - > findOneById(1)'沒有問題:)。 –

+0

我懂了!,我首先在設計數據庫時犯了錯誤!對不起,數據庫沒有。我不應該將外鍵設置爲主鍵...... –

0

爲v 1.2.1,Doctrine_Table :: find()方法是棄用 您可以檢查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」,它會拋出相同的錯誤:「無效的參數號碼:綁定的數量變量不匹配令牌數量「

+0

對我來說,我傳遞一個參數,它是'City'的標識'id',所以它需要通過每一個主鍵或什麼?? –

+0

你可以發佈你正在使用的查詢嗎?它會有很大的幫助:) –

+0

問題查詢是這樣的:'Doctrine :: getTable('City') - > find(1);'它寫在我的問題中。 –