Flutter
...
Data Objects
Создание отношений 1:М в Parse для Flutter приложений
16 мин
отношение один ко многим в flutter введение используя parse, вы можете хранить объекты данных, устанавливая отношения между ними для моделирования этого поведения любой parseobject parseobject может использоваться как значение в других parseobject parseobject внутри фреймворка parse будет храниться упоминаемый объект в одном месте, чтобы поддерживать согласованность это может дать вам дополнительную мощь при построении и выполнении сложных запросов существует три основных типа отношений один к одному один к одному , устанавливая прямые отношения между двумя объектами и только ими; один ко многим один ко многим , где один объект может быть связан с многими другими объектами; многие ко многим многие ко многим , что может создать множество сложных отношений между многими объектами в этом руководстве мы подробно расскажем, как работает один ко многим один ко многим отношение, используя практический пример приложения существует два способа создания один ко многим один ко многим отношения в parse первый способ использовать указатели указатели в дочернем классе дочернем классе , что является самым быстрым способом по времени создания и запросов второй способ использовать массивы массивы указателей указателей в родительском классе, что может привести к медленным временам запросов в зависимости от их размера из за этой проблемы с производительностью мы будем использовать только примеры с указателями вы реализуете приложение для регистрации книг на flutter и создадите и запросите связанные объекты, используя указатели указатели отношение как один к одному один к одному не является распространенным, и мы не будем его рассматривать в наших руководствах в качестве примера можно привести отношение между классом пользователь и другим классом, который будет содержать конфиденциальные данные пользователя по причинам безопасности https //blog back4app com/parse server best practices/ ( 1 4 не позволяйте пользователям получать доступ к конфиденциальным данным других ) предварительные требования версия flutter 2 2 x или новее https //flutter dev/docs/get started/install android studio https //developer android com/studio или установленный vs code (с плагинами dart и flutter) приложение созданное на back4app примечание следуйте учебнику по созданию нового parse app чтобы узнать, как создать parse app на back4app flutter приложение, подключенное к back4app примечание следуйте установите parse sdk в проект flutter чтобы создать проект flutter, подключенный к back4app устройство (или виртуальное устройство), работающее на android или ios понимание приложения book основной класс объекта, который вы будете использовать, это класс книга книга , хранящий каждую запись книги в реестре также это другие три класса объектов издатель издатель имя издателя книги, отношение «один ко многим» с книга книга ; жанр жанр жанр книги, отношение «один ко многим» с книга книга обратите внимание, что в этом примере мы будем считать, что у книги может быть только один жанр; автор автор автор книги, отношение «многие ко многим» с книга книга , поскольку у книги может быть более одного автора, и у автора может быть более одной книги; визуальное представление этой модели данных мы предположим, что каждый класс объекта ( издатель издатель , жанр жанр ) имеет только строковый тип имя имя атрибут и книга книга имеет название название и год год , помимо любых дополнительных реляционных атрибутов в предыдущих руководствах мы уже видели, как сохранять и читать parseobject parseobject поэтому в этом руководстве мы не будем рассматривать, как сохранять и читать жанр жанр и издатель издатель объекты вы найдете следующие экраны в приложении книга регистрация и список жанров регистрация и список издателей регистрация книги список издателей и книг детали книги мы не будем объяснять код приложения flutter, так как основное внимание в этом руководстве уделяется использованию flutter с parse с использованием отношений 1 создание шаблона приложения для книг сначала запустим шаблон проекта приложения для книг откройте свой проект flutter из предыдущего руководства flutter плагин для parse server репозиторий book flutter app https //github com/templates back4app/flutter associations также доступен для клонирования и запуска проекта скопируйте файл main dart https //github com/templates back4app/flutter associations/blob/master/lib/main dart и замените свой текущий код из предыдущих руководств примечание когда debug debug параметр в функции parse() initialize parse() initialize равен true true , это позволяет отображать вызовы api parse в консоли эта конфигурация может помочь в отладке кода рекомендуется отключить отладку в версии для выпуска шаг 2 подключите шаблон к проекту back4app найдите свои учетные данные application id и client key, перейдя на панель управления вашего приложения по адресу панель управления back4app >настройки приложения >безопасность и ключи https //www back4app com/docs/parse dashboard/app settings обновите свой код в main dart main dart с значениями applicationid и clientkey вашего проекта в back4app keyapplicationid = app id keyclientkey = client key запустите проект, и приложение загрузится, как показано на изображении нажмите на добавить жанр добавить жанр для регистрации и просмотра списка жанров жанров которые будут использоваться при регистрации книг нажмите на добавить издателя добавить издателя для регистрации и просмотра списка издателей издателей которые будут использоваться для регистрации книг нажмите на добавить книгу добавить книгу для регистрации новой книги книги с использованием отношений с жанром жанром и издателем издателем нажмите на список издателей/книг список издателей/книг для просмотра списка издателей издателей и книг книг 3 сохранить объект книги и его отношения эта функция создаст новую книгу в базе данных back4app с отношениями найдите функцию dosavebook dosavebook в файле main dart main dart , и вставьте код ниже внутрь функции future\<void> dosavebook() future\<void> dosavebook() 1 final book = parseobject('book') 2 set('title', controllertitle text trim()) 3 set('year', int parse(controlleryear text trim())) 4 //the objectid will be converted to a pointer on the save() method 5 set('genre', parseobject('genre') objectid = genre objectid) 6 //you can also convert to a pointer object before the saving using the topointer() method 7 set( 8 'publisher', 9 (parseobject('publisher') objectid = publisher objectid) 10 topointer()); 11 12 await book save(); чтобы создать эту функцию, выполните следующие шаги 1\ создайте новый экземпляр класса parse book book с помощью команды parseobject('book') parseobject('book') 2 используйте функцию set set для установки полей этого объекта 2 1 title title — это текстовый атрибут, который получает значение от текстового контроллера 2 2 genre genre получает значение, определяя parseobject parseobject с objectid objectid выбранного genre genre ( parse преобразует в указатель при сохранении ) 2 3 publisher publisher получает значение, определяя parseobject parseobject с objectid objectid выбранного publisher publisher ( обратите внимание, что мы можем указать для parse, что хотим сохранить как pointer pointer с помощью метода topointer() topointer() ) 3 вызовите функцию save save в parseobject parseobject , которая фактически зарегистрирует объект в вашей базе данных на панели управления back4app запустите приложение и протестируйте новую функцию нажмите на добавить книгу добавить книгу кнопку заполните информацию о книге приложение требует выбора авторов, но код для них будет представлен только в следующем руководстве нажмите на сохранить книгу сохранить книгу кнопку чтобы подтвердить, что новый объект сохранен в базе данных с отношениями, вы можете получить доступ к back4app dashboard back4app dashboard и получить доступ к book book классу если вы получите доступ к вашему классу book через dashboard, вы можете нажать на значение указателя объекта, и вы будете перенаправлены на ссылочный объект это может показаться безобидной функцией, но это значительно ускоряет отладку и отслеживание ошибок по сравнению с ручным поиском 4 запросите список книг и связанные с ними объекты эта функция будет запрашивать книги в базе данных back4app с использованием отношений с издателем через издателя мы получим список книг ищите функцию getbooklist getbooklist в файле main dart main dart , затем замените код ниже внутри future\<list\<parseobject>> getbooklist(string publisherid) future\<list\<parseobject>> getbooklist(string publisherid) функции 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('publisher', 4 (parseobject('publisher') objectid = publisherid) topointer()) 5 orderbyascending('title'); 6 final parseresponse apiresponse = await querybook query(); 7 8 if (apiresponse success && apiresponse results != null) { 9 return apiresponse results; 10 } else { 11 return \[]; 12 } чтобы создать эту функцию, выполните следующие шаги создайте экземпляр parsequery parsequery объекта для book book класса вставьте условие в запрос, чтобы искать книги книги где поле publisher publisher равно указателю указателю на publisher parseobject publisher parseobject мы сортируем результат в порядке возрастания имени имени выполните метод поиска запроса, используя query() query() метод если операции успешны, объекты в book book будут возвращены запустите приложение и протестируйте новый запрос сначала нажмите кнопку список издатель/книга список издатель/книга сделано! на данный момент вы узнали, как создавать и запрашивать отношения «один ко многим» в parse на flutter flutter в следующем руководстве мы покажем вам, как создать отношения «многие ко многим» и как выполнять запросы, возвращающие данные из связанных объектов