+1 امتیاز
قبل در برنامه نویسی توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط

در یک پیاده سازی بر روی play scala با استفاده از slick دو جدول به نام های User و Image موجود هستند که یک رابطه ی 1-1 بین آن ها وجود دارد

برای دسترسی به اطلاعات مدل مورد نیاز که به صورت زیر است:

case class sampleModel(name:String,image:String)

نیاز به join بر روی این دو جدول در dao وجود دارد که به صورت زیر انجام می شود:

def userByUsername(username:Option[String]): Future[Seq[(User,Image)]] = 
    db.run(Users.filter(_.username === username).join(Images).result)

همانطور که مشخص است حاصل خروجی به صورت (User,Image) است که با استفاده از ._1 و ._2 می توان به اجزای آن ها دسترسی پیدا کرد

اما چگونه می توان اطلاعات حاصل از join را به مدل در نظر گرفته شده map کرد؟

2 پاسخ

+2 امتیاز
قبل توسط (112 امتیاز)
ویرایش شده قبل توسط

اگر درست متوجه سوال شما شده باشم

شما یک 

Future[Seq[User, Image]]

دارید و میخواید اینو به 

Seq[SampleModel]

تبدیل کنید.

به شکل زیر میتونید راحت انجام بدید اینکارو (با فرض اینکه User دارای property به نام name و Image دارای url باشد) :

case class User(name: String)
case class Image(url: String)

case class SampleModel(name: String, image: String)

...

(for {
  a <- userByUsername(Some("ahmad.mo"))
  b <- Future {
    a.map(x => SampleModel(x._1.name, x._2.url))
  }
} yield b).onSuccess { case result: Seq[SampleModel] =>
  ???
}

موفق باشید.

+1 امتیاز
قبل توسط (982 امتیاز)
case class sampleModel(name:String,image:String)

db.run(Users.filter(_.username === username).join(Images).result).map{ items =>
  items map { case (item) =>
        (sampleModel.apply _).tupled(item)
      }
}

 

سوالات مشابه

0 امتیاز
1 پاسخ 332 بازدید
0 امتیاز
0 پاسخ 332 بازدید
+1 امتیاز
0 پاسخ 208 بازدید
+1 امتیاز
1 پاسخ 342 بازدید
0 امتیاز
1 پاسخ 3.6هزار بازدید
+1 امتیاز
1 پاسخ 303 بازدید
0 امتیاز
1 پاسخ 386 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 307 بازدید
...