私はsomequestionsを見ていましたが、Zend Frameworkのクエリで結合を行う方法を尋ねていますが、答えは常に "ちょっとsetIntegrityCheck(FALSE)
"のようなものです。setIntegrityCheck with Zend
私の質問はなぜこれを行う必要がありますか?
「完全性チェック」が無効になっているようですが、この作業を行う正しい方法ではありません。私の特定のケースでは、私は、外部キーを持ついくつかの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);
これは私が私の$select
にsetIntegrity(FALSE)
を追加しない限り、例外を「クエリは、別のテーブルに参加することはできませんを選択し、」私にを与えている:コードは次のようになります。
はい、動作しますが、あなたが指摘したように、結果セット内の結合テーブルからデータを取得することはできません。データはまだプライマリ・テーブルからのものであるため、結果の整合性に違反していません。「すべてのデータはプライマリ・テーブルに属しています」しかし、テーブルAの外部キーを持つ行だけを取得したい場合には便利です。それを指摘してくれてありがとう。整合性チェックが無効の – drew010
プライマリテーブルと結合テーブルの両方から取得できました。 info @cambracaのおかげで – Varshaan