Как сделать запрос (где, внутреннее соединение) с Alloy (appcelerator)?
Я работаю на:
Application Mobile with Alloy
Titanium SDK version: 2.1.3 (10/02/12 16:16 15997d0)
iPhone Device family: universal
iPhone SDK version: 6.0
iPhone simulated device: iphone
Detected compiler plugin: ti.alloy/1.0
Я создал две модели:
alloy generate model met sql met_id:int libelle:string famille_id:int
alloy generate model famille sql famille_id:int libelle:string
И заполнили следующие данные:
var mets = Alloy.createCollection('Met')
var met = Alloy.createModel("Met",{met_id:1,libelle:"Salade de Chèvre Chaud",famille_id:1});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:2,libelle:"Salade de Chèvre Chaud",famille_id:2});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:3,libelle:"Salade de Chèvre Chaud",famille_id:3});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:4,libelle:"Salade de Chèvre Chaud",famille_id:4});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:5,libelle:"Salade de Chèvre Chaud",famille_id:1});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:6,libelle:"Salade de Chèvre Chaud",famille_id:2});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:7,libelle:"Salade de Chèvre Chaud",famille_id:3});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:8,libelle:"Salade de Chèvre Chaud",famille_id:4});mets.add(met);met.save();
var met = Alloy.createModel("Met",{met_id:9,libelle:"Salade de Chèvre Chaud",famille_id:1});mets.add(met);met.save();
var familles = Alloy.createCollection('Famille')
var famille = Alloy.createModel("Met",{famille_id:1,libelle:"famille 1");familles.add(famille);famille.save();
var famille = Alloy.createModel("Met",{famille_id:2,libelle:"famille 2"});familles.add(famille);famille.save();
var famille = Alloy.createModel("Met",{famille_id:3,libelle:"famille 3"});familles.add(famille);famille.save();
var famille = Alloy.createModel("Met",{famille_id:4,libelle:"famille 4"});familles.add(famille);famille.save();
Теперь я хотел бы получить все "встретились" с famille_id = 1.
var mets = Alloy.createCollection('Met')
mets.where({famille_id:1}).
Моя первая проблема в том, что mets.length = 0
, Кто-нибудь знает почему? Во-вторых, как я могу сделать inner join
между met
а также famille_id
?
Для информации, если я сделаю:
var mets = Alloy.createCollection('Met')
mets.fetch();
for(var i = 0;i< mets.length;i++)
{
var args = {
plat : mets.models[i].attributes.libelle,
met_id : mets.models[i].attributes.met_id
}
var rowPlat = Alloy.createController('rowPlat', args).getView();
data.push(rowPlat);
}
У меня есть все данные в tableView
и работает нормально.
1 ответ
Решение
Ваша проблема в том, что вы не получили никаких данных. Так where
не вернет никакой записи.
Итак, сначала инициализируйте вашу коллекцию:
var mets = Alloy.createCollection('Met')
mets.fetch();
Затем, при необходимости, отфильтруйте ваши данные на основе вашего ввода.
mets.where({famille_id:1})
Поскольку я не использую Alloy, я не проверял это. Но Alloy.createCollection
просто вернуть Backbone.Collection
s