6
votes

Slick 3.0.0 - Comment sombrer sur une requête avec jointleft

Cette question est liée à Un autre . J'essaie également de trier sur une requête avec une jointeLet mais dans Slick 3.0.0. Et comme le report d'option est automatiquement soulevé, comment ferais-je exactement la même chose?:

def list(filter: String, orderBy: Int):Future[Seq[(Computer, Option[Company])]] = {
    val initialQuery = for {
        (computer, company) <- Computer.filter(_.name like filter) leftJoin 
            Company on (_.companyId === _.id)
    } yield (computer, company)

    val sortedQuery = orderBy match {
        case 2 => initialQuery.sortBy(_._1.name) //Works ok, column from a primary table
        case 3 => initialQuery.sortBy(_._2.map(_.name)) //could not find implicit value for parameter ol: slick.lifted.OptionLift[slick.lifted.ColumnOrdered[String],slick.lifted.Rep[Option[QO]]]
    }
    db.run(sortedQuery.result)
}


0 commentaires

4 Réponses :


0
votes

Êtes-vous sûr de copier le code correct? xxx

manquant a ")"

doit être xxx


0 commentaires

5
votes

Je suppose que cette parenthèse manquante n'est qu'une faute de frappe. J'ai eu ce problème récemment lorsque je spécifiais la direction de tri au mauvais endroit, à l'aide de votre exemple: xxx

Il devrait être: xxx


1 commentaires

Merci d'avoir répondu, mais oui c'était juste une faute de frappe.



0
votes

Vous pouvez mettre les champs dans le jeu de résultats. Par exemple: xxx


0 commentaires

1
votes

J'ai aussi eu ce problème. J'avais une joinget et je veux commander sur une colonne booléenne. Vous devez décider lorsque sa jointure est vide quelle valeur vous voulez le remplacer.

Par exemple: P>

initialQuery.sortBy(_._2.map(_.name).getOrElse(""))


0 commentaires