Основные данные — как получить результаты с помощью фильтра другого объекта

#ios #xcode #sqlite #core-data

#iOS #xcode #sqlite #основные данные

Вопрос:

я хотел бы получать результаты из объекта и фильтровать результат с помощью атрибута из другого объекта.

у меня есть 2 объекта:

Пользователи{идентификатор пользователя, имя_файла, фамилия_имя}

UsersPhoneNumbers{phone_id, идентификатор пользователя, phone_number}

в SQL это должно выглядеть следующим образом:

 select * from Users where Users.user_id in (select user_id from UsersPhoneNumbers where phone_number = ' 972-54-...')
  

Ответ №1:

Вероятно, вы захотите добавить связь между вашей пользовательской сущностью и UsersPhoneNumbers.

Т.е. это будет выглядеть следующим образом:

Users{user_id,first_name,last_name,phone_number}

UsersPhoneNumbers{phone_id,user,phone_number}

Затем используйте запрос на выборку на основе этого отношения:

 NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"phone_number.phone_number like[cd] %@",  @" 972-54*"];
NSArray* users = [managedObjectContext executeFetchRequest:fetchRequest error:nil];
  

Комментарии:

1. Как мне добавить связь между атрибутами? Users.user_id-> UserPhoneNumbers.user_id

2. @RonFridman, в вашем файле модели данных (xcdatamodel) вы хотите добавить новую «связь» с вашим объектом Users. Задайте его имя как «phone_number», назначение как «UserPhoneNumbers». Сделайте то же самое для своих пользовательских номеров. Затем установите «обратный», когда оба определены (вы получите предупреждение, если вы не установите их — это автоматически добавит обратные ссылки — так, например, если вы установите user.phone_number, PhoneNumber.user устанавливается автоматически). Я бы рекомендовал проверить ссылку на CoreData