2014-08-31 1 views
1

J'ai essayé d'utiliser des migrations pour une base de données cross-dbms. En utilisant les paquets confier et confier, j'ai ajouté des migrations après eux pour ajouter une table user_statuses et une référence dans la table des utilisateurs aux ids des états des utilisateurs; mais comme je définis la clé étrangère je reçois ceci:Laravel-OCI8 ORA-02275: une telle contrainte référentielle existe déjà dans la table

 
[Illuminate\Database\QueryException] 
Error Code : 2275 
Error Message : ORA-02275: such a referential constraint already exists in the table 
Position  : 53 
Statement  : alter table users add constraint users_state_foreign foreign key (state) references user_statuses (id) (SQL: alter table users add constraint users_state_foreign foreign key (state) references user_statuses (id)) 

[yajra\Pdo\Oci8\Exceptions\SqlException] 
Error Code : 2275 
Error Message : ORA-02275: such a referential constraint already exists in the table 
Position  : 53 
Statement  : alter table users add constraint users_state_foreign foreign key (state) peferences user_statuses (id) 

Voici les user_statuses et la migration d'altération. création de user_status:

Schema::create('user_statuses', function($table){ 
    // Columns 
    $table->increments('id')->unsigned(); 
    $table->string('name'); 

    // Indexes 

    // Constraints 
}); 

utilisateurs modification:

Schema::table('users',function($table){ 
    // Columns 
    $table->integer('state')->unsigned(); 
    $table->softDeletes(); 

    // Indexed 

    // Constraints 
    $table->foreign('state')->references('id')->on('user_statuses'); 
}); 
+0

La base de données que vous utilisez a déjà une contrainte nommée 'USERS_STATE_FOREIGN'. Essayez d'exécuter les opérations suivantes: 'SELECT * FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'USERS_STATE_FOREIGN''. Bonne chance. –

+0

Merci @BobJarvis! Je cours les migrations pour un DB frais (je purge même le reste). J'ai essayé de changer le nom de la contrainte, le nom de la colonne. J'ai supprimé la définition de clé étrangère dont je suis au courant et il n'y aura pas de contraintes. J'ai testé les migrations avec mysql et elles me semblent correctes. Je cours des requêtes pures et ils vont bien. Je vais risquer de penser que cela pourrait faire quelque chose avec le paquet yajra/laravel-oci8 ou la migration elle-même, qui appelle cette ligne plus d'une fois! – Cunning

+1

Personnellement, je n'utiliserai aucune variété de «framework» de base de données parce que mon observation est qu'ils causent plus de problèmes qu'ils n'en résolvent. YMMV. –

Répondre

0

Je mets la déclaration foreign() dans une autre, nouvelle déclaration Schema::table() dans le même fichier, juste en dessous celui qui crée des colonnes comme ci-dessous:

Schema::table('users', function($table){ 
    // Columns 
    $table->integer('kojak')->unsigned(); 
    $table->softDeletes(); 

    // Indexed 

    // Constraints 

}); 
Schema::table('users', function($table){ 
    $table->foreign('kojak')->references('id')->on('user_statuses'); 
}); 

Cela a résolu mon problème, mais la question reste de savoir pourquoi le code conventionnel ne fonctionne pas.

Questions connexes