forked from mirror/gorm
Add Scope.addForeignKey()
This commit is contained in:
parent
b33f30714b
commit
a8b3e8d3e2
11
main.go
11
main.go
|
@ -400,6 +400,17 @@ func (s *DB) AddIndex(indexName string, column ...string) *DB {
|
|||
return s
|
||||
}
|
||||
|
||||
/*
|
||||
Add foreign key to the given scope
|
||||
|
||||
Example:
|
||||
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")
|
||||
*/
|
||||
func (s *DB) AddForeignKey(field string, dest string, onDelete string, onUpdate string) *DB {
|
||||
s.clone().NewScope(s.Value).addForeignKey(field, dest, onDelete, onUpdate)
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *DB) AddUniqueIndex(indexName string, column ...string) *DB {
|
||||
s.clone().NewScope(s.Value).addIndex(true, indexName, column...)
|
||||
return s
|
||||
|
|
|
@ -630,6 +630,20 @@ func (scope *Scope) addIndex(unique bool, indexName string, column ...string) {
|
|||
scope.Raw(fmt.Sprintf("%s %v ON %v(%v);", sqlCreate, indexName, scope.QuotedTableName(), strings.Join(columns, ", "))).Exec()
|
||||
}
|
||||
|
||||
func (scope *Scope) addForeignKey(field string, dest string, onDelete string, onUpdate string) {
|
||||
var table string = scope.TableName()
|
||||
var keyName string = fmt.Sprintf("%s_%s_foreign", table, field)
|
||||
var query string = `
|
||||
ALTER TABLE %s
|
||||
ADD CONSTRAINT %s
|
||||
FOREIGN KEY (%s)
|
||||
REFERENCES %s
|
||||
ON DELETE %s
|
||||
ON UPDATE %s;
|
||||
`
|
||||
scope.Raw(fmt.Sprintf(query, table, keyName, field, dest, onDelete, onUpdate)).Exec()
|
||||
}
|
||||
|
||||
func (scope *Scope) removeIndex(indexName string) {
|
||||
scope.Dialect().RemoveIndex(scope, indexName)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue