Zend Framework クエリで結合を行う方法を尋ねるいくつかの 質問を見ていましたが、答えは常に「ただ行うsetIntegrityCheck(FALSE)
」のようなものです。
私の質問は、なぜこれを行う必要があるのですか?
「整合性チェック」を無効にすることは、これを機能させる適切な方法ではないようです。私の特定のケースでは、外部キーを持ついくつかの InnoDB テーブルを持つ MySQL データベースを使用しています。たとえば、次のようになります。
CREATE TABLE IF NOT EXISTS `tableA`
(
`id` CHAR(6),
`name` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `tableB`
(
`tableA_id` CHAR(6),
`somefield` VARCHAR(255),
PRIMARY KEY (`tableA_id`)
) ENGINE=InnoDB;
ALTER TABLE `tableB` ADD FOREIGN KEY fk1 (`tableA_id`) REFERENCES `tableA` (`id`);
(これは私のDBの非常に単純化されたバージョンです)
そして、私のクエリコードは次のようになります。
$table = new Zend_Db_Table('tableB');
$select = $table->select(TRUE)
->join(array('a' => 'tableA'), 'tableB.tableA_id = a.id');
$result = $table->fetchAll($select);
に追加しない限り、「選択クエリは別のテーブルと結合できません」という例外が発生setIntegrity(FALSE)
します$select
。