это случайные клиентские и курсовые репо
@Singleton
class CourseRepository @Inject()(dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) {
// We want the JdbcProfile for this provider
val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig._
import profile.api._
class CourseTable(_tableTag: Tag) extends Table[Course](_tableTag, "course") {
def * = (courseId, name) <> ((Course.apply _).tupled, Course.unapply)
def ? = (Rep.Some(courseId), Rep.Some(name)).shaped.<>({ r => import r._; _1.map(_ => (Course.apply _).tupled((_1.get, _2.get))) }, (_: Any) => throw new Exception("Inserting into ? projection not supported."))
val courseId: Rep[Int] = column[Int]("course_id", O.PrimaryKey)
val name: Rep[String] = column[String]("name", O.Length(255, varying = true))
}
private val courses = TableQuery[CourseTable]
def create(course: Course) = db.run {
courses += course
}
def findById(courseId: Int): Future[Course] = db.run {
courses.filter(_.courseId === courseId).result.head
}
def createMany(courseList:Seq[Course]) = db.run{
courses ++= courseList
}
def list(): Future[Seq[Course]] = db.run {
courses.result
}
}
@Singleton
class ClientRepository @Inject()(dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) {
// We want the JdbcProfile for this provider
private val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig._
import profile.api._
private class ClientTable(tag: Tag) extends Table[Client](tag, "client") {
def * = (userId, name) <> ((Client.apply _).tupled, Client.unapply)
def ? = (Rep.Some(userId), Rep.Some(name)).shaped.<>({ r => import r._; _1.map(_ => (Client.apply _).tupled((_1.get, _2.get))) }, (_: Any) => throw new Exception("Inserting into ? projection not supported."))
val userId: Rep[Int] = column[Int]("client_id", O.PrimaryKey, O.AutoInc)
val name: Rep[String] = column[String]("name", O.Length(255, varying = true))
}
private val people = TableQuery[ClientTable]
def create(client: Client) = db.run {
people += client
}
def findById(clientId: Int) = db.run {
people.filter(_.userId === clientId).result.head
}
def list(): Future[Seq[Client]] = db.run {
people.result
}}
В чем моя проблема, у меня есть 3-я таблица client_course, где я сопоставляю отношения многие ко многим между этими двумя таблицамии для объединения мне нужен доступ к клиентской таблице и таблице курсов, но мой репозиторий client_course находится в другом классе, и я не могу просто получить доступ к таблице из clientrepo или courserepo, поэтому мой вопрос в том, как мне написать репозиторий client_course и получить доступ к таблицам.мне нужно выполнить несколько запросов на присоединение?
пример
for {
(client, course) <- clients join courses
} yield (client, course)
, чтобы сделать это, я должен получить доступ к таблице клиентов и курсов, которая управляется другими репозиториями, если я просто поставлю TableQuery для клиента иКонечно, в моем репозитории client_course?
вот так
private val clientCourses = TableQuery[ClientCourse]
private val courses = TableQuery[Course]
private val clients = TableQuery[Client]