我在尋找的東西看起來很常見,但我似乎無法通過Squeryl API找到它。我需要在我的聲明中加入一個條件片段。Squeryl動態連接子句
def getAllJoined(
hasFallback:Option[String] = None
):List[(Type1,Type2)] = transaction{
join(mainTable,
table2,
table3,
table3,
table4.leftOuter,
table4.leftOuter,
table5,
table6)((main, attr1, attr2, attr3, attr4, attr5, attr6, attr7) =>
select(main,attr1,attr2,attr3,attr4,attr5,attr6,attr7)
on(
//if(hasFallback.isDefined) (main.fallBack).isNotNull else 1 === 1.inhibitWhen(true)
(main.attr1Col === attr1.id) ,
(main.attr2Col === attr2.id) ,
(main.attr3Col === attr3.id) ,
(main.attr4Col === attr4.map(_.id)) ,
(main.attr5Col === attr5.map(_.id)) ,
(main.attr6Col === attr6.id) ,
(main.attr7Col === attr7.id)
)
).toList
我不知道我怎麼能得到這個。我曾考慮過諸如在另一個地方加入,或者做了我在這裏評論的內容。
底線基本上是如果我有這個hasFallback標誌上,我只需要返回此列不爲空(定義)的對象。否則,如果hasFallback標誌不存在,則忽略它是否已定義。
編輯:它看起來像on方法只能採取七個參數。有沒有解決這七個參數限制的方法?
另外,type mismatch; found : org.squeryl.dsl.boilerplate.JoinQueryYield6[myTuple] required: org.squeryl.dsl.boilerplate.JoinQueryYield7[?]
因此,顯然我無論如何都被迫有7個理由嗎?沒有更多或更少。
直接從squeryl站點
如果連接具有N個參數,在「接通」功能必須採取N-1自變量, 第i個「導通」狀態對應於第i個表表情:
join(T, A1, A2,... AN)((a1,a2,...,aN) =>
...
on(...condition for a1...,...condition for a2...,......condition for aN...,)
)
SOLUTION:對於任何其他人同樣的問題在這裏登陸,這裏是使用WHERE子句的解決方案。
...table6)((main, attr1, attr2, attr3, attr4, attr5, attr6, attr7) =>
where(
main.fallBack.isNotNull.inhibitWhen(!hasFallback.isDefined)
)
select(main,attr1,attr2,attr3,attr4,attr5,attr6,attr7)...
我會測試這個,但顯然'上'只能採取7個參數......有沒有辦法解決這個問題? – kingdamian42
嗯,我不確定。錯誤是你不能加入超過7個表,或者任何兩個表只能加入不超過7個'LogicalBoolean'條件?此外,是否源自數據庫?如果是後者,我認爲你可以將這些條件中的一些移到WHERE條款。 – jcern
這是一個squeryl問題。我最終將條件添加到where子句中,並且似乎正在工作。謝謝! – kingdamian42