Ватерлинии ассоциации, изменить внешний ключ?

Последний ватерлинии теперь поддерживает ассоциации. Вот пример один ко многим

// A user may have many pets
var User = Waterline.Collection.extend({

  identity: 'user',
  connection: 'local-postgresql',

  attributes: {
    firstName: 'string',
    lastName: 'string',

    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
});

var Pet = Waterline.Collection.extend({

  identity: 'pet',
  connection: 'local-postgresql',

  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',

    // Add a reference to User
    owner: {
      model: 'user'
    }
  }
});

Это создает поле с именем owner на коллекции питомцев. Это было бы хорошо, за исключением работы с существующей БД. который называет это внешним ключом owner_id,

Есть ли способ переопределить имя поля, используемого в базе данных?

1 ответ

Решение

Вы можете изменить имя столбца, используемого для любого атрибута модели, установив columnName имущество:

  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',

    // Add a reference to User
    owner: {
      columnName: 'owner_id',
      model: 'user'
    }
  }

Также обратите внимание, что при определении модели в Sails вы не должны расширяться непосредственно от Waterline, а просто сохранять файл модели в /api/models с соответствующим именем, например User.js:

module.exports = {

   attributes: {
      breed: 'string',
      type: 'string',
      name: 'string',

      // Add a reference to User
      owner: {
         model: 'user',
         columnName: 'owner_id'
      }
   }
}

и позвольте Sails / Waterline управлять идентификацией и связью для вас, если вы действительно не хотите переопределить значения по умолчанию.

Другие вопросы по тегам