در slick چگونه می توان حاصل join را map کرد؟

+1 رأی
میانگین بازدید روزانه 0.0863 بازدید

در یک پیاده سازی بر روی 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 سال قبل در تالار برنامه نویسی توسط moeenzarrinfam (2,569 امتیاز)
ویرایش 2 سال قبل توسط Saeed Zarinfam

2 جواب

+2 رأی

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

شما یک 

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] =>
  ???
}

موفق باشید.

جواب 2 سال قبل توسط Ahmad Mozafarnia (112 امتیاز)
ویرایش 2 سال قبل توسط Ahmad Mozafarnia
+1 رأی
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)
      }
}

 

جواب 1 سال قبل توسط Nasim Salmani (942 امتیاز)

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.0864 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.0950 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0860 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.0328 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0552 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0350 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0746 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0647 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0654 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.197 بازدید
کانال تلگرام جواب یاب
...