Loopback возвращает существующую запись в PU/UPSERT

У меня есть следующая таблица местоположений PostGreSQL:

--------------------
| ID | Name        |
--------------------
| 1  | Kitchen     |
--------------------
| 2  | Bedroom1    |
--------------------

ID — это последовательный PQ, а Name имеет уникальное ограничение.

Свойство Locations.json Name имеет

"index": {
    "unique": true
 },

А Locations.js включает Location.validatesUniquenessOf('Name');

Если я запускаю PUT против Locations с помощью JSON { "Name":"Kitchen" }, я получаю ошибку проверки 422, что нормально, но в идеале я должен одновременно получить существующую запись Kitchen (или, по крайней мере, идентификатор). Могу ли я сделать это в рамках loopback с помощью одного вызова REST?


person conradj    schedule 19.05.2015    source источник


Ответы (1)


Вы можете расширить свой API с помощью настраиваемого удаленного метода, а затем использовать метод findOrCreate в своей модели, чтобы вернуть найденный или созданный экземпляр в качестве ответа.

http://docs.strongloop.com/display/public/LB/Remote+methods#Remotemethods-Howtodefinearemotemethod

http://docs.strongloop.com/display/public/LB/PersistedModel+class;#persistedmodel-findorcreate

Location.findOrCreate(
  {where: {"name": "Kitchen"}},
  data,
  function(err, instance){
    if (err){
      console.log(err);
    }
    console.log(instance); //this will be your found or created instace based on query
  });
person A.Z.    schedule 19.05.2015
comment
Спасибо @A.Z. Это возвращает полный объект, если он уже существует в базе данных, но не если он добавлен. Есть ли способ вернуть недавно вставленную запись с ее новым полем идентификатора? - person conradj; 19.05.2015
comment
Привет, conradj ... Я сам пробовал этот метод, он всегда возвращает идентификатор (найден или создан). В документации говорится, что он возвращает экземпляр, если он найден, но он всегда возвращает экземпляр. - person A.Z.; 19.05.2015
comment
Это работает - петля, кажется, хочет, чтобы все модели и свойства были в нижнем регистре, иначе все перестанет работать. Благодарю вас! - person conradj; 20.05.2015