Play-Slick Scala многие ко многим - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть конечная точка, скажем, / order /, куда я могу отправить объект json (мой заказ), который содержит некоторые продукты и т. Д., Поэтому моя проблема заключается в том, что мне нужно сначала сохранить заказ и дождаться идентификатора заказа обратно из БДа затем сохраните мои продукты с этим новым идентификатором заказа (мы говорим о многих со многими, поэтому есть другая таблица)

Рассмотрим этот метод контроллера

def postOrder = Action(parse.json[OrderRest]) { req => {

    Created(Json.toJson(manageOrderService.insertOrder(req.body)))
  }
}

так выглядят мои методы репокак

  def addOrder(order: Order) = db.run {
    (orders returning orders) += order
  }

как я могу связать db.runs с первым вставленным заказом, получить идентификатор заказа и затем вставить мои продукты с этим заказным идентификатором, который я только что получил?между моим контроллером и репо, и управлением этими действиями там, но я понятия не имею, с чего начать

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете использовать for для объединения операций базы данных.Вот пример добавления таблицы в базу данных путем добавления строки заголовка для представления таблицы и последующего добавления строк данных.В данном случае это простая таблица, содержащая (age, value).

/** Add a new table to the database */
def addTable(name: String, table: Seq[(Int, Int)]) = {
  val action = for {
    key <- (Headers returning Headers.map(_.tableId)) += HeadersRow(0, name)
    _ <- Values ++= table.map { case (age, value) => ValuesRow(key, age, value) }
  } yield key

  db.run(action.transactionally)
}

Это вырезано из рабочего кода, но оно должно дать представление о том, как делать то, что вы хотите.Первый оператор for будет генерировать идентификатор заказа, а затем второй оператор будет добавлять заказ с этим идентификатором заказа.

Это делается transactionally, так что новый заказ не будет создан, если только данные заказадействителен (в терминах базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...