diff --git a/database/gdb/gdb_model_fields.go b/database/gdb/gdb_model_fields.go index b051afba6..3e9421bb2 100644 --- a/database/gdb/gdb_model_fields.go +++ b/database/gdb/gdb_model_fields.go @@ -7,6 +7,7 @@ package gdb import ( + "errors" "fmt" "github.com/gogf/gf/container/gset" "github.com/gogf/gf/text/gstr" @@ -129,13 +130,13 @@ func (m *Model) FieldsExStr(fields string, prefix ...string) string { } // HasField determine whether the field exists in the table. -func (m *Model) HasField(field string) bool { +func (m *Model) HasField(field string) (bool, error) { tableFields, err := m.db.TableFields(m.tables) if err != nil { - panic(err) + return false, err } if len(tableFields) == 0 { - panic(fmt.Sprintf(`empty table fields for table "%s"`, m.tables)) + return false, errors.New(fmt.Sprintf(`empty table fields for table "%s"`, m.tables)) } fieldsArray := make([]string, len(tableFields)) for k, v := range tableFields { @@ -143,8 +144,8 @@ func (m *Model) HasField(field string) bool { } for _, f := range fieldsArray { if f == field { - return true + return true, nil } } - return false + return false, nil } \ No newline at end of file diff --git a/database/gdb/gdb_z_mysql_model_test.go b/database/gdb/gdb_z_mysql_model_test.go index eabf8d607..faa04202e 100644 --- a/database/gdb/gdb_z_mysql_model_test.go +++ b/database/gdb/gdb_z_mysql_model_test.go @@ -2437,3 +2437,37 @@ func Test_Model_Empty_Slice_Argument(t *testing.T) { t.Assert(len(result), 0) }) } + +func Test_Model_HasTable(t *testing.T) { + table := createTable() + defer dropTable(table) + + gtest.C(t, func(t *gtest.T) { + result, err := db.HasTable(table) + t.Assert(result, true) + t.Assert(err, nil) + }) + + gtest.C(t, func(t *gtest.T) { + result, err := db.HasTable("table12321") + t.Assert(result, false) + t.Assert(err, nil) + }) +} + +func Test_Model_HasField(t *testing.T) { + table := createTable() + defer dropTable(table) + + gtest.C(t, func(t *gtest.T) { + result, err := db.Table(table).HasField("id") + t.Assert(result, true) + t.Assert(err, nil) + }) + + gtest.C(t, func(t *gtest.T) { + result, err := db.Table(table).HasField("id123") + t.Assert(result, false) + t.Assert(err, nil) + }) +} \ No newline at end of file