【问题标题】:How do query (where,inner join) with Alloy (appcelerator)?如何使用 Alloy(appcelerator)查询(where,inner join)?
【发布时间】:2012-11-01 21:42:20
【问题描述】:

我正在努力:

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。有人知道为什么吗? 第二个是如何在metfamille_id 之间创建inner join

有关信息,如果我这样做:

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 中拥有所有数据,并且工作正常。

【问题讨论】:

  • @Jba - 在进行批量编辑之前,值得在元数据上讨论它。可能会在这些标签的现有讨论中发布建议此操作的答案:meta.stackexchange.com/questions/178089/…。另外请确保您在编辑时花时间解决所有问题,而不仅仅是琐碎的标签问题。

标签: backbone.js appcelerator titanium-alloy


【解决方案1】:

您的问题是您没有获取任何数据。所以where 不会返回任何记录。

所以首先初始化你的集合:

var mets = Alloy.createCollection('Met')
mets.fetch();

然后在需要时,根据您的输入过滤您的数据。

mets.where({famille_id:1})

由于我不使用合金,所以我没有对此进行测试。但是Alloy.createCollection 只返回一个Backbone.Collection s

【讨论】:

  • 谢谢,它有效!下一个问题,如何在 Collection 之间进行 INNER JOIN,例如:SELECT * FROM familles INNER JOIN mets ON mets.famille_id = familles.famille_id
  • 我很好奇您是否找到了您的内部连接问题的答案?我遇到了同样的问题,希望有解决方案。
  • @Nando 现在有一个解决方案将合金更新到 .3.5+,并在 1.0 之后将您的模型适配器类型更改为“sql_new”(暂时),直到他们说回到“sql”。然后你可以做以下collection.fetch({ query: 'SQL Statement'});
  • @h3r2on 谢谢!这很好用,如果有人感兴趣,我发布了link to the documentation
猜你喜欢
  • 1970-01-01
  • 2015-03-10
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2012-11-04
  • 2015-01-10
相关资源
最近更新 更多