
Igor
21.09.2016
12:01:50
Нужны люди, которые будут ходить в офис

Andrey
21.09.2016
12:32:36

folex
21.09.2016
12:36:06
неплохой ресурс
но заблокирован, да

Google

Anatoliy
21.09.2016
12:54:56
Доброго дня всем! :) Есть кто использует Slick?) Можете подсказать как можно сделать что бы не приходилось при join'e в каждом выводе проверять наличие приджойнившейся таблицы? А то как-то не очень удобно получается при выводе проверять каждое поле отдельно...

Kyrylo
21.09.2016
12:56:00
" каждом выводе проверять наличие приджойнившейся таблицы?"
есть пример кода? того чего ты пытаешся избежать
а то я не очень понял

Anatoliy
21.09.2016
12:57:42
<td>@company._2.getOrElse(model.User()).login</td> не хочу для каждого поля делать проверку. Очень хочется просто делать вывод "как есть" т.е. по типу @company._2.login
Понятно что это надо до вывода делать, но это можно провернуть при самом запросе?

Vladimir
21.09.2016
12:59:13
а Slick сам запрос покажи

Anatoliy
21.09.2016
12:59:20
db.run(table.joinLeft(Users.table).on(_.user_id === _.id).result)

Diemust
21.09.2016
12:59:42
а просто join тоже Option возвращает?

Vladimir
21.09.2016
12:59:49
нет

Diemust
21.09.2016
12:59:55
ну и вот тогда
=)

Vladimir
21.09.2016
12:59:57
есть leftJoin он Option[T]
есть join он T

Google

Kyrylo
21.09.2016
13:00:07
?

Vladimir
21.09.2016
13:00:11
но может ему такой запрос именно нужен

Anatoliy
21.09.2016
13:00:21
угу, и что будет если там не окажется связки? упадет все с грохотом?

Kyrylo
21.09.2016
13:00:33
innerJoin
по умолчания

Diemust
21.09.2016
13:00:40
пропустит запись, где не джойнится
как скл, в общем

Kyrylo
21.09.2016
13:00:47
да

Anatoliy
21.09.2016
13:01:00
угу, но мне надо то вывести все)

Kyrylo
21.09.2016
13:01:14
тогда это как раз место для Option
не надо избешать его

Vladimir
21.09.2016
13:01:24
<td>@company._2.map(_.login)</td>

Diemust
21.09.2016
13:01:25
делай в yield getOrElse, минимум красивей будет

Vladimir
21.09.2016
13:01:25
вот так пиши
Play шаблоны None умеют обрабатывать

Anatoliy
21.09.2016
13:01:40
угу, но если записи нет - я хочу подставить просто пустой User и вывести его как есть везде

Aleksei
21.09.2016
13:02:23
не интуитивный он какой-то

Diemust
21.09.2016
13:02:28
ну делаешь цепочку flatMap - это все что в for, а в конце бац, и просто map, это yield

Vladimir
21.09.2016
13:02:42
> <td>@company._2.map(_.login)</td>
Так не хочется писать?

Google

Kyrylo
21.09.2016
13:02:42
<td>@company._2.map(_.login) getOrElse { /*пустой юзер*/ }</td>

Anatoliy
21.09.2016
13:02:43
так я и не хочу избегать Option, я хочу просто если у меня там ничего нет - впихнуть туда пустую модельку

Vladimir
21.09.2016
13:02:52
а именно модельку)

Anatoliy
21.09.2016
13:02:53

folex
21.09.2016
13:02:57
В скале ж максимально простой yield, без всяких генераторов или ленивостей. Просто map после цепочки flatMap’ов

Kyrylo
21.09.2016
13:03:23

Anatoliy
21.09.2016
13:03:44

Vladimir
21.09.2016
13:03:56
я везде так короче писал <td>@company._2.map(_.login)</td>

Anatoliy
21.09.2016
13:04:06

Vladimir
21.09.2016
13:04:16
ну так это ж и есть сила
map :)
и монады Option

Vladimir
21.09.2016
13:04:43
ещё можно от _2 избавиться

Anatoliy
21.09.2016
13:04:46
угу) и тогда еще такой вопрос, можно вместо _2 что бы писалось user а вместо _1 company например?

Vladimir
21.09.2016
13:05:05
ща сек
можешь шаблон от места где он в цикле что-то рисует
и полный slick запрос

Anatoliy
21.09.2016
13:06:09
@for(company <- companies) {
<tr>
<td>@company._1.id</td>
...
}
db.run(table.joinLeft(Users.table).on(_.user_id === _.id).result)

folex
21.09.2016
13:06:24
в ТГ есть ```

Google

folex
21.09.2016
13:06:31
в него многострочники заворачивай, чтобы моношринно было, как в IDE

Anatoliy
21.09.2016
13:07:05
Поправил

folex
21.09.2016
13:07:08
типа того да

Diemust
21.09.2016
13:08:31
а надо что-то говорить, что вызов в дб делать в темплейте - не круто или это отход от темы?
или в плее норм?

Anatoliy
21.09.2016
13:09:03
Что значит вызов в ДБ в темплейте? там уже просто вывод

Diemust
21.09.2016
13:09:27
а, сорян, не так посомтрел =)

Vladimir
21.09.2016
13:09:53
@for((smth, user) <- companies) {
<tr>
<td>smth.id</td>
...
}

Admin
ERROR: S client not available

Vladimir
21.09.2016
13:10:04
антапл можно в for делать
Play понимает
ну там @smth.id
а не просто smrrh
ну вы поняли)

Anatoliy
21.09.2016
13:11:15
Спасибо. По поводу yield - я так понимаю в моем случае надо так:
for{
(company, user) <- table joinLeft Users.table on (_.user_id === _.id)
} yield (company, user)
?

Vladimir
21.09.2016
13:11:45
это ты про шаблон?
или про slick
я про шаблон

Anatoliy
21.09.2016
13:12:12
про слик уже - как делать через yield запросы?

Vladimir
21.09.2016
13:12:19
а зачем через yeild

Google

Vladimir
21.09.2016
13:12:20
да так
только пользы от этого
там и там бы был tuple2

Anatoliy
21.09.2016
13:12:30
про шаблон - спасибо понял) не понимаю почему сам так не додумался

Vladimir
21.09.2016
13:12:45
то что ты два раза эти переменые распокавал-спаковал

Anatoliy
21.09.2016
13:12:50
Просто через yield вот этот вариант что выше у меня не сработал

Vladimir
21.09.2016
13:12:50
это только если они нужны дальше
или ты хочешь с ними что-то сделать

Anatoliy
21.09.2016
13:13:08

Vladimir
21.09.2016
13:13:20
for{
(company, user) <- table joinLeft Users.table on (_.user_id === _.id)
} yield (company, user.getOrElse(EmptyUser))
?
максимум бы такой вариант помог
тогда бы выл на выходе всегда (Company,User) а не (Сompany,Option[User])
или ты про вообще синтаксис yield?

Anatoliy
21.09.2016
13:14:14
Вообще про синтаксис, у меня то что я выше написал - не работает)

Vladimir
21.09.2016
13:14:30
db.run((for {(i, b) <- TableQuery[TblIncome] join TableQuery[TblBankMoneyOrder] on (_.bankMoneyOrderId === _.id)} yield (i, b)).result)
вот так надо
всё это в скобки
и по нему result
и внутрть db.run

Anatoliy
21.09.2016
13:14:54
Хм... спасибо

Vladimir
21.09.2016
13:15:52
ну если у тебя не цепочка запросов, которые ты все в одну транзакцию хочешь засунуть
то сильного смысла в yeild нет