Grails: как удалить запись из отношения «многие ко многим»?

Информация о приложении:

  • Версия Grails: 3.1.8
  • Крутая версия: 2.4.6
  • Версия JVM: 1.8.0_60

Класс моего домена:

class AgePhase {

    String agePhase

    static hasMany = [assessors: Assessor]

Другой класс домена:

class Assessor {

    static belongsTo = [AgePhase]

    static hasMany = [agePhase: AgePhase]

В моей базе данных у меня есть Assessor, AgePhase и таблица асессора/agePhase соединения.

Как удалить запись из таблицы оценщика/agePhase на основе идентификатора agePhase и идентификатора оценщика?


person kulsoompatel    schedule 05.09.2016    source источник
comment
Разве это не так просто, как Assessor.findAllByAgePhase(AgePhase.get(agePhaseID))*.delete()?   -  person Mike B    schedule 05.09.2016


Ответы (2)


вам нужно вызвать removeFrom для объекта AgePhase (поскольку он принадлежит этому классу) и указать объект Assessor в качестве аргумента.

Пример:

def agePhase = AgePhase.get(agePhaseId)
def assessor = Assessor.get(assessorId)

agePhase.removeFromAssessors(assessor)

Это удалит запись в соединении agePhaseId и AssessmentorId.

person Bernhard    schedule 06.09.2016

Если вы хотите удалить запись из реляционной таблицы на основе agePhaseId и assessorId, вы можете попробовать следующее:

def agePhase = AgePhase.get(agePhaseId)
def assesor = agePhase.assessors.find{ it.id == assessorId }
agePhase.removeFromAssessors(assesor)

Ссылка в документации по Grails: removeFrom

person NachoB    schedule 06.09.2016
comment
вызывать find для всех асессоров — плохой стиль, потому что вы запрашиваете всех асессоров в базе данных. - person Bernhard; 08.09.2016