2017-01-30 17 views
0

私は2つのテーブルatmsとatm_devicesを持っていますが、atmsテーブルにはatm_devicesがたくさんあります。新しいAtmを作成しながら、Atmに関連する新しいatm_devicesを作成したいと思っています。 atmを追加する前に、私は15 atmsと60 atm_devicesを持っています。atmsのidは1〜15で、atm_devicesのidは1〜60です。新しいAtmを追加すると、idは16から始まります。これまで何も間違っていません。この問題はatm_devicesが作成されたときに始まり、最初に新しく作成されたatm_devicesには、新しいatm(この場合は16)のidに等しいidが自動的に割り当てられます。これは、「整合性制約違反:1062 Duplicate entry」を作成しています。これは、1〜60の数値がすでに60 atm_devicesで占有されているためです。ここに私のコードは `$ atm1 = new Atm; $ atm-> name = $ request-> get( 'name'); $ atm-> ip_address = $ request-> get( 'ip_address'); $ atm-> save(); $ atmDevice1 =新しいAtmDevice; $ atmDevice1-> name = 'トップカセット'; $ atmDevice1-> oid = '.1.3.6.1';Laravel 5.2関連モデルの挿入に整合性制約違反があります

$atmDevice2 = new AtmDevice; 
$atmDevice2->name = 'Cash Dispenser Second Cassette'; 
$atmDevice2->oid = '.1.3.6.1.4'; 
$atm->atmDevices()->saveMany([$atmDevice1, $atmDevice2]);` 
+0

あなたは気圧のデバイス上の外部キーを定義したように感じます主キーと同じである必要があります。あなたの関係定義は何ですか? – apokryfos

+0

ありがとうapokryfosその理由は、私は私のコードでエラーがあったと私は$ this-> hasMany( 'App \ AtmDevice'、 'id')を返すから変更しました。 $ this-> hasMany( 'App \ AtmDevice'、 'atm_id')を返します。 – temesgen

答えて

0

外部キーに使用する名前と関係の定義に使用されたものはそうのように同じである必要があります:

public function atmDevices() 
{ 
    return $this->hasMany('App\AtmDevice', 'atm_id'); 
} //relationship definition 


$table->foreign('atm_id')->references('id')->on('atms')->onDelete('cascade');//migration table states atm_id is a foreign key 
関連する問題