Получить список объектов, еще не связанных с Parse.com Angular Javascript

0

Я создаю сайт AngularJS CRUD для добавления данных на Parse.com для использования мобильными приложениями, которые его прочтут. (CRUD проще делать на реальной клавиатуре из-за количества добавленных данных.) Первый шаг - создать и сохранить дочерние объекты (ингредиенты и шаги), а затем создать и сохранить объект рецепта, который имеет отношение к Ингредиенты и этапы. Для этого мне нужно использовать Relation, а не указатели. (потому что мне может понадобиться, чтобы это было много для многих в будущем)

Здесь моя проблема: написать запрос, чтобы найти какие-либо ингредиенты и шаги, которые были созданы, которые еще не являются частью отношения, чтобы найти те, которые будут добавлены в новый рецепт.

Примеры в Javascript SDK не показывают этот сценарий, они показывают только запрос для отношения, которое существует, но не имеет дополнительного атрибута связанного элемента (комментарии для сообщений, в которых сообщение не имеет изображения).

Recipe has ingredients, a Relation<Ingredient>, and steps, a Relation<Step>.

Это не работает, чтобы получить ингредиенты, которые еще не связаны с рецептом.

    var Recipe = Parse.Object.extend("Recipe");
    var Ingr = Parse.Object.extend("Ingredient");

    recipeQuery= new Parse.Query(Recipe);
    recipeQuery.exists("ingredients");

    query = new Parse.Query(Ingr);
    query.doesNotMatchQuery("recipe",recipeQuery);
    query.ascending('name');
    query.find({
        success: function (data) {
            if (data.length > 0) {
                $scope.loadingMsg = '';
            }
            $scope.ingredients = data;
        }
    });
  • 0
    Я думаю, что это не может быть сделано с одним запросом, если вы хотите с несколькими запросами, я могу попробовать :)
  • 0
    Мне просто нужно решение, которое будет работать, и чтобы понять, что оно делает, чтобы я мог заставить свой CRUD работать. Если требуется несколько запросов, это нормально. Буду признателен за любую помощь, которую вы можете предоставить. Спасибо!
Теги:
parse.com

1 ответ

1
angular
.module('app.services')
.service('siteService', function($q, ParseService, $timeout) {
    var that = this;
    this.fetchIngr = function() {
        return this.fetchRecipes().then(function(recipes) {
            var q = recipes.reduce(function(initial, current) {
                initial.push(that.fetchIngredient(current));
                return initial;
            }, []);
            return $q.all(q);
        });
    };

    this.fetchRecipes = function() {
        var defer = $q.defer();
        var Recipe = Parse.Object.extend("Recipe");
        recipeQuery = new Parse.Query(Recipe);
        recipeQuery.ascending('name');
        recipeQuery.find({
            success: function(data) {
                console.log('data', data)
                defer.resolve(data);
            },
            error: function(error) {
                defer.reject(error);
            }
        });
        return defer.promise;

    };
    this.fetchIngredient = function(recipe) {
        var defer = $q.defer();
        recipe.relation('ingredients').query().find({
            success: function(res) {
                defer.resolve(res);
            },
            error: function(error) {
                defer.reject(error);
            }
        });
        return defer.promise;
    };

})

Применение:

 siteService.fetchIngr().then(function(all){
            console.log('flatten all ingr for used recipes',[].concat.apply([], all));
        });

в функции fetchIngr вы получите массив всех ингредиентов, которые используются в Рецепте. то вам нужно разграничить два массива, чтобы найти неиспользуемые ингредиенты. Чтобы сделать вычитание, вы должны получить все ингредиенты и сделать вычитание между двумя массивами (один из них использовался для рецептов и один со всеми ингредиентами). см. здесь сообщение: разность массивов JavaScript

если у вас есть вопросы, не стесняйтесь спрашивать меня.

  • 0
    Спасибо! Я собираюсь попробовать это утром. Сегодня я искал другие способы выбора подмножества для варианта «многие ко многим», но ваше решение может дать мне правильный набор для 99% времени.
  • 0
    что случилось? все нормально?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню