teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

追記

2020/07/25 13:36

投稿

norun07
norun07

スコア8

title CHANGED
File without changes
body CHANGED
@@ -25,9 +25,4 @@
25
25
  Postを親にした時PostのIDが入ります。
26
26
  また、Commentを親にした時には(Commentにコメントする)、その親CommentのIDが入ります。
27
27
 
28
- ### 試したこと
28
+ ### 試したこと
29
-
30
-
31
- Scalaの知識がお有りの方がおられましたら
32
- 何卒お力添え願います。
33
- よろしくお願いいたします。

2

誤字

2020/07/25 13:36

投稿

norun07
norun07

スコア8

title CHANGED
File without changes
body CHANGED
@@ -3,21 +3,7 @@
3
3
 
4
4
  今のところPostに紐づいたCommentは取得できる状態でソースコードは以下のようになります(CommentのCommentは取得できない)。
5
5
  ```scala
6
- def findAllPost(
6
+
7
- implicit session: DBSession = autoSession): Seq[(Post, Seq[Comment])] = {
8
- withSQL[Post] {
9
- select
10
- .from(Post.as(p))
11
- .leftJoin(Comment.as(c))
12
- .on(p.id, c.parent_post_id)
13
- }.one(Post(p.resultName))
14
- .toMany(
15
- rs => rs.stringOpt(c.resultName.parent_post_id).map(_ => Comment(c)(rs)),
16
- )
17
- .map((post, comments) => (post, comments))
18
- .list()
19
- .apply()
20
- }
21
7
  ```
22
8
  ### テーブルの関係
23
9
  **Post**
@@ -40,60 +26,8 @@
40
26
  また、Commentを親にした時には(Commentにコメントする)、その親CommentのIDが入ります。
41
27
 
42
28
  ### 試したこと
43
- Commentケースクラスは定義済みで同じケースクラスを使用すると差異が出ないのでCommentケースクラスと同じ構造のnestCommentケースクラスを以下のように定義しました。
44
- ```scala
45
- case class nestComment(
46
- id: String = UUID.randomUUID.toString,
47
- user_id: String,
48
- text: String,
49
- parent_post_id: String,
50
- comment_count: Int,
51
- posted_at: Date
52
- )
53
29
 
54
- object nestComment extends SQLSyntaxSupport[nestComment] {
55
30
 
56
- def apply(nc: ResultName[nestComment])(rs: WrappedResultSet): nestComment = new nestComment(
57
- id = rs.string(nc.id),
58
- user_id = rs.string(nc.user_id),
59
- text = rs.string(nc.text),
60
- parent_post_id = rs.string(nc.parent_post_id),
61
- comment_count = rs.int(nc.comment_count),
62
- posted_at = rs.date(nc.posted_at)
63
- )
64
- def apply(nc: SyntaxProvider[nestComment])(rs: WrappedResultSet): nestComment =
65
- apply(nc.resultName)(rs)
66
-
67
- var nc = nestComment.syntax("nc")
68
- }
69
- ```
70
-
71
- そしてこのようにtoManiesを使用して紐付けましたがnestCommentにはコラムが無いとエラーが出てしまします。
72
- ```scala
73
- def findAllPost(
74
- implicit session: DBSession = autoSession): Seq[(Post, Seq[Comment], Seq[nestComment])] = {
75
- withSQL[Post] {
76
- select
77
- .from(Post.as(p))
78
- .leftJoin(Comment.as(c))
79
- .on(p.id, c.parent_post_id)
80
- .leftJoin(nestComment.as(nc))
81
- .on(p.id, nc.parent_post_id)
82
- }.one(Post(p.resultName))
83
- .toManies(
84
- rs => rs.stringOpt(c.resultName.parent_post_id).map(_ => Comment(c)(rs)),
85
- rs => rs.stringOpt(nc.resultName.parent_post_id).map(_ => nestComment(nc)(rs)),
86
- )
87
- .map((post, comments, nestcomments) => (post, comments, nestcomments))
88
- .list()
89
- .apply()
90
- }
91
- ```
92
- ```Error
93
- IllegalStateException: No column found for nest_comment. If you use NamedDB, you must override connectionPoolName.
94
-
95
- ```
96
-
97
31
  Scalaの知識がお有りの方がおられましたら
98
32
  何卒お力添え願います。
99
33
  よろしくお願いいたします。

1

追記

2020/07/25 13:36

投稿

norun07
norun07

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- **実現したいこと**
1
+ ### 実現したいこと
2
2
  Postに紐づいたComment、そしてそのCommentに紐づいたCommentを一覧でデータベースから抽出したいのですが、同じテーブルの関係をどのようにOne-to-Maniesで記述するのかが分かりません。
3
3
 
4
4
  今のところPostに紐づいたCommentは取得できる状態でソースコードは以下のようになります(CommentのCommentは取得できない)。
@@ -39,7 +39,7 @@
39
39
  Postを親にした時PostのIDが入ります。
40
40
  また、Commentを親にした時には(Commentにコメントする)、その親CommentのIDが入ります。
41
41
 
42
- **試したこと**
42
+ ### 試したこと
43
43
  Commentケースクラスは定義済みで同じケースクラスを使用すると差異が出ないのでCommentケースクラスと同じ構造のnestCommentケースクラスを以下のように定義しました。
44
44
  ```scala
45
45
  case class nestComment(