Comment puis-je définir des contraintes uniques sur deux colonnes?
class MyModel extends Migration {
public function up()
{
Schema::create('storage_trackers', function(Blueprint $table) {
$table->increments('id');
$table->string('mytext');
$table->unsignedInteger('user_id');
$table->engine = 'InnoDB';
$table->unique('mytext', 'user_id');
});
}
}
MyMode::create(array('mytext' => 'test', 'user_id' => 1);
// this fails??
MyMode::create(array('mytext' => 'test', 'user_id' => 2);
laravel-4
database-schema
user391986
la source
la source
id
, donnent au framework une sensation d'amateur sur les bords. Suis-je déclamé? :-(Réponses:
Le deuxième paramètre consiste à définir manuellement le nom de l'index unique. Utilisez un tableau comme premier paramètre pour créer une clé unique sur plusieurs colonnes.
ou (un peu plus soigné)
la source
array()
. Parce que j'ai essayé sans tableau et cela n'a pas fonctionné. puis-je donner le nom de la contrainte lors de l'exécution de la clé composite via le générateur de schéma?table_column1_column2...n_unique
si quelqu'un n'est pas sûr. L'abandon de la contrainte unique ferait alors référence à cela dans$table->dropUnique('table_column1_column2...n_unique');
Vous pouvez simplement utiliser
Référence: http://laravel.com/docs/master/migrations#creating-indexes
Par exemple:
la source
->unique()
.->unique()
c'est plus approprié dans cette question spécifique car cela'mytext'
ferait probablement une mauvaise clé comme le ferait n'importe quelle colonneVARCHAR
ouTEXT
.->primary([])
serait idéal pour assurer l'unicité sur les entiers tels que les clés étrangères pivot.la source