3

I'm working on:

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

I've created two models:

alloy generate model met sql met_id:int libelle:string famille_id:int
alloy generate model famille sql famille_id:int libelle:string

And filled the following data:

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();

Now, I would like fetch all "met" with famille_id = 1.

var mets = Alloy.createCollection('Met')
mets.where({famille_id:1}).

My first problem is that mets.length = 0. Anybody know why? Second one is how can I make an inner join between met and famille_id?

For information, if I do:

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);
}

I have all data in a tableView, and it works fine.

jbalsas
  • 3,484
  • 22
  • 25
user1820851
  • 35
  • 1
  • 3
  • @Jba - before going through with bulk edits it's worth discussing it on meta. Probably posting an answer proposing this action on the existing discussion of these tags: http://meta.stackexchange.com/questions/178089/tagging-confusion-inconsistency-with-alloy-ui. Also please make sure you take time to fix all the issues when you edit, not just the trivial tag ones. – Flexo Jul 07 '13 at 09:38

1 Answers1

6

Your problem is that you have not fetched any data. So where will return no record.

So first initialize your collection :

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

Then when needed, filter your data based on your input.

mets.where({famille_id:1})

As I do not use Alloy I have not tested this. But Alloy.createCollection just return a Backbone.Collection s

stefbach
  • 151
  • 4
  • Thanks, it works! next question, how make an INNER JOIN between Collection like : `SELECT * FROM familles INNER JOIN mets ON mets.famille_id = familles.famille_id` – user1820851 Nov 14 '12 at 14:40
  • I'm curious if you have found an answer to your inner join question? I'm having the same problem and hoping there is a solution. – Nando Nov 29 '12 at 15:06
  • 1
    @Nando there is a solution now update alloy to .3.5+ and change your model adapter type to 'sql_new' (for the time being) after 1.0 till go back to 'sql' they say. Then you can do the following `collection.fetch({ query: 'SQL Statement'});` – h3r2on Feb 02 '13 at 06:03
  • @h3r2on Thanks! This works great, I posted a [link to the documentation](http://docs.appcelerator.com/titanium/latest/#!/guide/Alloy_Sync_Adapters_and_Migrations) if anyone is interested. – Nando Jun 28 '13 at 13:21