Yöntem Doctrine_Table :: find () önerilmemektedir?

2 Cevap php

I had a problem with the method Doctrine_Table::find(), since it's thorowing an exception of SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

I Doctrine::getTable('City')->findOneById($id); yerine kullanarak sorunu çözmüş ve iyi çalışıyor.

Ben official website ben yöntemi hakkında hiçbir belgelerine beri şaşırdı sorunun Doctrine_Table::find() yaklaşık invistigate çalıştı.

Any one knows what's the problem? is it deprecated? BTW it's exists on the actual code! of the version (1.2.1).

veritabanı hakkında daha fazla bilgi:

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;

Ne garip ki hem Doctrine_Table::find(), ve Doctrine_Table::findOneById() Country masanın üzerinde çalışıyor!.

PS: I Doctrine_Table::findOneById() bir __call() üretilen bir yöntem olduğunu biliyoruz. Ve beklendiği gibi gerçek find() yöntemi davranmaz neden beni daha karıştı yapmak (benim beklenti yanlış ya da ne)!

2 Cevap

Ah benim kötü. I = p bana daha önce, utanç görmedim

Sizin tablo iki birincil anahtarlar (id ve country_id) sahiptir, bu yüzden bulmak yöntem bulmak yöntemi iki parametre geçmek gerekir.

Yerine sihirli yöntemleri kullanabilirsiniz:

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

As of v 1.2.1, Doctrine_Table::find() is NOT deprecated You can check the official documentation on http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview#table:finder-methods

"Geçersiz parametre numarası" hatası gelince, beklenenden daha fazla veya daha az parametreleri vardır, en sık (?) Bir belirteç kullanılır ve buna parametre eklemek unuttum sorgulamak anlamına gelir

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

'?' I kullanılan iki örnek belirteçleri var, ama sadece tek bir parametre 'jonh', aynı hata atmak: "Geçersiz parametre numarası: ilişkili değişkenleri sayısı jeton sayısı eşleşmiyor"