У меня есть следующий код в Lighthouse:
updateProject(
input: UpdateProjectInput! @spread
): Project @update
Модель Project содержит отношение hasOne с моделью технико-экономического обоснования, поэтому для ее создания / обновления используется следующий код:
input UpdateProjectFeasibilityBelongsTo {
create: CreateProjectFeasibilityInput
update: UpdateProjectFeasibilityInput
}
Единственное различие между ними заключается в наличии идентификатора в обновлении, поскольку он необходим для определения связанной модели. Почему, смотрите это: https://github.com/nuwave/lighthouse/issues/1158. Эти входные данные определены ниже:
// other fields removed for emphasis
input CreateFeasibilityStudyInput {
target_2016: Float
}
input UpdateFeasibilityStudyInput {
id: ID
target_2016: Float
}
Создать связанную модель легко с помощью этих отношений, так как мне просто нужно вызвать команду create. Однако обновление будет затруднено, поскольку вам необходимо определить первичный ключ модели технико-экономического обоснования, который может существовать или не существовать (это необязательное поле).
Теперь можно ли переключаться между созданием и обновлением на основе о том, существует ли связанный идентификатор модели или нет с помощью директивы graphql @update
? Альтернатива состоит в том, чтобы использовать собственный распознаватель, но это означало бы, что я должен написать все другие функции вставки / обновления (у меня есть 13 полей, которые требуют отношений). Вот так:
if ($project->feasibility_study()->exists()) {
// update existing related model i.e. run update method
}
else {
// create new model i.e. run create method
}
Пожалуйста, дайте мне знать, если у вас есть какие-либо другие разъяснения. Кстати, у меня нет проблем с обновлением / созданием, мне просто нужно знать, есть ли способ переключения между двумя командами без использования специального преобразователя.
Заранее спасибо.