Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张磊
/
FileStorageBeego
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
9492e413
authored
2013-11-06 21:08:12 +0800
by
slene
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
support reverse m2m relation
1 parent
2abda095
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
6 deletions
orm/db_utils.go
orm/orm.go
orm/orm_test.go
orm/db_utils.go
View file @
9492e41
...
...
@@ -63,7 +63,7 @@ outFor:
if
len
(
v
)
>
10
{
s
=
v
[
:
10
]
}
t
,
err
=
time
.
ParseInLocation
(
format_Date
,
s
,
DefaultTimeLoc
)
t
,
err
=
time
.
ParseInLocation
(
format_Date
,
s
,
tz
)
}
if
err
==
nil
{
if
fi
.
fieldType
==
TypeDateField
{
...
...
orm/orm.go
View file @
9492e41
...
...
@@ -119,8 +119,11 @@ func (o *orm) QueryM2M(md interface{}, name string) QueryM2Mer {
mi
,
ind
:=
o
.
getMiInd
(
md
)
fi
:=
o
.
getFieldInfo
(
mi
,
name
)
if
fi
.
fieldType
!=
RelManyToMany
{
panic
(
fmt
.
Errorf
(
"<Ormer.QueryM2M> name `%s` for model `%s` is not a m2m field"
,
fi
.
name
,
mi
.
fullName
))
switch
{
case
fi
.
fieldType
==
RelManyToMany
:
case
fi
.
fieldType
==
RelReverseMany
&&
fi
.
reverseFieldInfo
.
mi
.
isThrough
:
default
:
panic
(
fmt
.
Errorf
(
"<Ormer.QueryM2M> model `%s` . name `%s` is not a m2m field"
,
fi
.
name
,
mi
.
fullName
))
}
return
newQueryM2M
(
md
,
o
,
mi
,
fi
,
ind
)
...
...
orm/orm_test.go
View file @
9492e41
...
...
@@ -483,9 +483,9 @@ func TestExpr(t *testing.T) {
throwFail
(
t
,
err
)
throwFail
(
t
,
AssertIs
(
num
,
3
))
num
,
err
=
qs
.
Filter
(
"created"
,
time
.
Now
()
.
Format
(
format_Date
))
.
Count
()
throwFail
(
t
,
err
)
throwFail
(
t
,
AssertIs
(
num
,
3
))
//
num, err = qs.Filter("created", time.Now().Format(format_Date)).Count()
//
throwFail(t, err)
//
throwFail(t, AssertIs(num, 3))
}
func
TestOperators
(
t
*
testing
.
T
)
{
...
...
@@ -1093,6 +1093,75 @@ func TestQueryM2M(t *testing.T) {
num
,
err
=
m2m
.
Count
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
0
))
tag
:=
Tag
{
Name
:
"test"
}
_
,
err
=
dORM
.
Insert
(
&
tag
)
throwFailNow
(
t
,
err
)
m2m
=
dORM
.
QueryM2M
(
&
tag
,
"Posts"
)
post1
:=
[]
*
Post
{
&
Post
{
Title
:
"TestPost1"
},
&
Post
{
Title
:
"TestPost2"
}}
post2
:=
&
Post
{
Title
:
"TestPost3"
}
post3
:=
[]
interface
{}{
&
Post
{
Title
:
"TestPost4"
}}
posts
:=
[]
interface
{}{
post1
[
0
],
post1
[
1
],
post2
,
post3
[
0
]}
for
_
,
post
:=
range
posts
{
p
:=
post
.
(
*
Post
)
p
.
User
=
&
User
{
Id
:
1
}
_
,
err
:=
dORM
.
Insert
(
post
)
throwFailNow
(
t
,
err
)
}
num
,
err
=
m2m
.
Add
(
post1
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
2
))
num
,
err
=
m2m
.
Add
(
post2
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
1
))
num
,
err
=
m2m
.
Add
(
post3
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
1
))
num
,
err
=
m2m
.
Count
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
4
))
num
,
err
=
m2m
.
Remove
(
post3
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
1
))
num
,
err
=
m2m
.
Count
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
3
))
exist
=
m2m
.
Exist
(
post2
)
throwFailNow
(
t
,
AssertIs
(
exist
,
true
))
num
,
err
=
m2m
.
Remove
(
post2
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
1
))
exist
=
m2m
.
Exist
(
post2
)
throwFailNow
(
t
,
AssertIs
(
exist
,
false
))
num
,
err
=
m2m
.
Count
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
2
))
num
,
err
=
m2m
.
Clear
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
2
))
num
,
err
=
m2m
.
Count
()
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
0
))
num
,
err
=
dORM
.
Delete
(
&
tag
)
throwFailNow
(
t
,
err
)
throwFailNow
(
t
,
AssertIs
(
num
,
1
))
}
func
TestQueryRelate
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment