1

こんにちは、States と StoreLocations のテーブルを含むデータベースをセットアップしました。両方のエンティティを作成しました。RESTful サービスと同様に。ローカル マシンに新しい場所を投稿すると、すべて正常に動作します。

プロジェクトを別のサーバーにデプロイしましたが、このマシンに新しい場所を投稿しようとすると、次のエラーが発生します

Code: 23000 
Message: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`vitanica`.`StoreLocation`, CONSTRAINT `storelocation_ibfk_1` FOREIGN KEY (`state_id`) REFERENCES `state` (`id`))
File: /home/audioglobe.com/zend/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php
Line: 131 

これがあるマシンでは機能し、別のマシンでは機能しない理由がわかりません。この問題についてご意見をお寄せいただきありがとうございます。

ここに私のテーブルがあります:

mysql> show create table StoreLocation

| StoreLocation | CREATE TABLE `StoreLocation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL,
`address` varchar(80) DEFAULT NULL,
`city` varchar(80) DEFAULT NULL,
`state_id` int(11) DEFAULT NULL,
`zip` varchar(12) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
`lat` float(10,6) DEFAULT NULL,
`lng` float(10,6) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `state` (`state_id`),
CONSTRAINT `storelocation_ibfk_1` FOREIGN KEY (`state_id`) REFERENCES `state` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 |

mysql> show create table State

| State | CREATE TABLE `State` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(10) NOT NULL,
`state` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=latin1 |

そして、私のエンティティからのスニペット:

/** @Entity */ 
class State
{
  ....
    /** @OneToMany(targetEntity="StoreLocation", mappedBy="state") */
    private $stores;
}

/** @Entity @HasLifecycleCallbacks*/
class StoreLocation
{
    /**
    * @ManyToOne(targetEntity="State", inversedBy="id")
    */
    private $state;
}
4

2 に答える 2

3

本番環境では mysql が大文字と小文字を区別していたため、fk が失敗していたようです。テーブル名はState、参照された制約を通過しstate(id)ました。すべてのテーブル名を小文字に変更@Table('state')し、エンティティにプロパティを追加しました。現在、すべてが期待どおりに機能しています。助けてくれてありがとう!

于 2012-09-19T23:22:05.240 に答える
0

制約の要点は、 内では、テーブル にも存在しStoreLocationない を持つことはできないということです。state_idState

State州の完全なリストをテーブルに入力しましたか?

于 2012-09-19T20:39:33.063 に答える