Реляционная магистраль, работающая с данными mysql, представляющими модели в виде строк таблицы.

Представьте, что у нас есть две таблицы в mysql: cars и engine.

Строка таблицы Cars будет иметь следующую структуру:

  • id: интервал
  • engineId: int (внешний ключ к столбцу engines.id)
  • brand: строка

Строка таблицы двигателей:

  • id: интервал,
  • type: строка (представьте, что у нас есть электрические и дизельные двигатели)

Итак, я хочу получить все данные из этих таблиц, создать коллекции моделей на стороне клиента и, наконец, отобразить таблицу с объединенными результатами:

  • идентификатор автомобиля
  • название бренда
  • Тип двигателя

Итак, я пробовал много примеров, но я не могу понять, что я делаю неправильно. Не могли бы вы помочь, пожалуйста?

// Create car model
window.Car = Backbone.RelationalModel.extend({

});

// Create engine model
window.Engine = Backbone.RelationalModel.extend({
  relations: [{
    type: 'HasMany',
    key: 'cars',
    relatedModel: 'Car',
    reverseRelation: {
      key: 'engine',
      includeInJSON : 'engineId',
    }
  }]
});

// Create engine instance
var engine = new window.Engine({
  id : 1,
  type : 'electric',
});

// Create car instance
var car = new window.Car({
  id       : 1,
  brand    : 'Toyota',
  engineId : 1, 
});

// i expect to get 'electric'
console.log(car.getRelation('engine').type); 

person avasin    schedule 29.07.2013    source источник


Ответы (1)


Попробуй это:

// Create car model
var Car = Backbone.RelationalModel.extend({
});

// Create engine model
var Engine = Backbone.RelationalModel.extend({
    relations: [{
        type: 'HasMany',
        key: 'cars',
        relatedModel: Car,
        reverseRelation: {
            key: 'engine'
        }
    }]
});

// Create engine instance
var engine = new Engine({
  id : 1,
  type : 'electric'
});

// Create car instance
var car = new Car({
  id       : 1,
  brand    : 'Toyota',
  engine   : 1
});

// get 'electric'
console.log(car.get('engine').get('type'));
person Sergey    schedule 29.07.2013
comment
Да, это работает, но вы нигде не указали поле engineId. Означает ли это, что когда мы определяем ключ engine, реляционная база engineId автоматически ищет поле engineId? - person avasin; 29.07.2013
comment
Да это так. И вы сделали три ошибки: 1) relatedModel: нужна модель RM, 2) engineId - нигде не объявлен, 3) правило возврата getRelation для отношения - person Sergey; 29.07.2013