Обновление выписки с фильтрами, sortBy, map и take - PullRequest
0 голосов
/ 03 октября 2018

Я пишу следующий оператор обновления для базы данных MySql:

Orders.filter(_.cookie === cookie).sortBy(_.id.desc).map(_.payTypeId).take(1)

sortBy и take(1) используются, чтобы гарантировать, что я обновляю только самый последний заказ для определенного cookie.Этот запрос отлично работает как обычный SELECT, эта проблема здесь использует его как оператор обновления.

Я получаю ошибку:

[SlickException: A query for an UPDATE statement must resolve to a comprehension with a single table -- Unsupported shape: Comprehension s2, Some(Apply Function =), None, ConstArray((Path s2.id,Ordering(Desc,NullsDefault))), None, None, Some(LiteralNode 1 (volatileHint=false)), None, false]

Если я удалю предложение take(1)все работает нормально.Почему я получаю эту ошибку?

Похоже, у Github есть обсуждение этого без решения.

Обходной путь с использованием простого SQL

(этот запрос возвращает Vector[Int])

        val updateQuery =
      sql"""
         UPDATE
            orders
         SET
          orders.pay_type_id = $id
         WHERE
            orders.cart_cookie = $cookie
         ORDER BY id desc
         LIMIT 1
      """.as[Int]
...