Действия с базой Supabase
Действия Supabase добавляют, добавляют-или-обновляют, изменяют, удаляют и выбирают строки в таблицах.
Кроме действий, для Supabase настраиваются Backend Queries — они подгружают данные сами и держат их свежими через потоковые обновления в реальном времени.
- Пройдена настройка Supabase.
- Создана таблица с полями, с которыми будет работать действие.
Какие бывают действия
- Insert Row — добавляет строку в таблицу.
- Upsert Row — добавляет строку, а если строка с такими же значениями в колонках конфликта уже есть, обновляет её.
- Update Row — обновляет строки, подходящие под фильтр.
- Delete Row — удаляет строки, подходящие под фильтр.
- Query Rows — выбирает строки по условию.
Insert Row [Действие]
Insert Row нужен, когда строку надо именно создать — всегда новую.
Как настроить:
- Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
- Нажмите + Add Action, найдите и выберите Insert Row.
- В поле Table укажите таблицу Supabase, куда добавляется строка.
- В секции Set Fields нажмите + Add Field и выберите поле.
- Задайте значение напрямую или выберите From Variable, чтобы взять его, например, из состояния виджета.
- Повторите шаги 4–5 для остальных полей.
Поля, которые база заполняет сама, не трогайте. Так, Supabase сам подставит id, если это identity-колонка, и created_at, если у него значение по умолчанию now().
Upsert Row [Действие]
Upsert Row добавляет новую строку, если в таблице нет строки с такими же значениями в выбранных колонках конфликта. Если такая строка есть, действие её обновляет. Удобно, когда данные надо сохранить, не выясняя сначала запросом, существует запись или нет.
Например, при сохранении задачи колонкой конфликта можно сделать id. Есть задача с таким id — обновятся её поля, нет — появится новая.
Как настроить:
- Выберите виджет, который будет запускать действие.
- Откройте Action Flow Editor.
- Нажмите + Add Action, найдите и выберите Upsert Row.
- В поле Table укажите таблицу Supabase.
- В секции Set Fields нажмите + Add Field и задайте значения для вставки или обновления. Значения для каждой колонки конфликта обязательны.
- В On Conflict Columns выберите первичный ключ или уникальные колонки, по которым распознаётся существующая строка.
- По желанию укажите Action Output Variable Name, чтобы использовать возвращённую строку в следующих действиях.
Выбранные колонки должны образовывать первичный ключ или уникальное ограничение (unique constraint) в Supabase. Если их значения не совпали ни с одной строкой, действие вставит новую. Подробнее — в документации Supabase по upsert.
Upsert может и вставить строку, и обновить, поэтому таблице нужны подходящие политики RLS и на INSERT, и на UPDATE. Если используете результат действия, пользователю также нужно право прочитать возвращённую строку. Как писать политики — в руководстве Supabase по Row Level Security.
Update Row [Действие]
Update Row меняет одну или несколько существующих строк, подходящих под фильтр.
Как настроить:
- Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
- Нажмите + Add Action, найдите и выберите Update Row.
- В поле Table укажите таблицу Supabase.
- По желанию включите Return Matching Rows, если обновлённые строки нужны в следующих действиях.
- В секции Matching Rows нажмите + Add Filter и заполните Field Name, Relation и Value. Например: Field Name —
id, Relation — Equal To, Value — идентификатор нужной строки. - В секции Set Fields нажмите + Add Field и задайте новые значения.
Delete Row [Действие]
Delete Row удаляет одну или несколько строк, подходящих под фильтр.
Как настроить:
- Выберите виджет, который будет запускать действие, и откройте Action Flow Editor.
- Нажмите + Add Action, найдите и выберите Delete Row.
- В поле Table укажите таблицу Supabase, из которой удаляются строки.
- По желанию включите Return Matching Rows, если удалённые строки нужны в следующих действиях.
- В секции Matching Rows нажмите + Add Filter и заполните Field Name, Relation и Value. Например: Field Name —
id, Relation — Equal To, Value — идентификатор нужной строки.
Какие строки обновятся или удалятся, решает фильтр. Если нужна ровно одна строка, фильтруйте по уникальному полю вроде id.
После удаления можно добавить действие Refresh Database Request, чтобы список на экране обновился.
Query Rows [Действие]
Query Rows загружает данные в ответ на действие — например, по нажатию кнопки. Пригодится, когда запрос должен выполняться только после действия пользователя или когда разным действиям нужны разные данные.
Как настроить:
- Выберите виджет, который будет запускать запрос, и откройте Action Flow Editor.
- Нажмите + Add Action, найдите и выберите Query Rows.
- Выберите таблицу в поле Table.
- По желанию добавьте фильтры или сортировку.
- Укажите Action Output Variable Name — под этим именем строки будут доступны в следующих действиях.
Использование результата
Полученные строки лежат в Action Outputs. Чтобы показать их в ListView, сгенерируйте динамические дочерние элементы из выходной переменной действия и привяжите виджеты внутри каждого элемента к нужным полям строки.
Фильтрация
Фильтры оставляют только строки, подходящие под условие, — скажем, только выполненные задания.
Чтобы добавить фильтр:
- В свойствах действия Query Rows нажмите + Add Filter.
- В Field Name выберите колонку, по которой фильтруете.
- Выберите Relation.
- Задайте Value и нажмите Confirm.
Отношение подбирается под задачу. Например:
- Equal To — только выполненные задания: Field Name —
is_done, Relation — Equal To, Value —True. - Greater Than — только пользователи старше 30: Field Name —
age, Relation — Greater Than, Value —30. - Like — адреса с индексом, начинающимся на
35: Field Name —zip_code, Relation — Like, Value —35%. В значении работают подстановочные знаки:- Процент (
%) — ноль или больше любых символов.'A%'— любая строка, начинающаяся с'A'('Apple','Apex').'%A%'— любая строка, содержащая'A'('Canada','Australia').
- Подчёркивание (
_) — ровно один символ.'A_'— строки из двух символов, начинающиеся с'A'('An','At').'A__'— строки из трёх символов, начинающиеся с'A'('Ant','Art').
- Процент (
Несколько фильтров объединяются через AND или OR — так собираются составные условия.
Сортировка
Сортировка возвращает строки в заданном порядке — например, задания по сроку сдачи.
Чтобы задать порядок:
- В свойствах действия Query Rows нажмите + Add Order.
- В Table Field Name выберите колонку для сортировки.
- В Order выберите Increasing или Decreasing и нажмите Confirm.
Чтобы задания с ближайшим сроком шли первыми: Table Field Name — due_date, Order — Increasing.
Реакция на изменение данных
Действие можно запускать в момент, когда данные в таблице Supabase меняются. Например, в интернет-магазине — показывать уведомление, когда меняется статус заказа.
- Убедитесь, что к виджету (скажем, ListView) добавлен Supabase Query с выключенной опцией Single Time Query — иначе обновлений в реальном времени не будет.
- На этом виджете откройте Action Flow Editor и выберите триггер On Data Change. Теперь действия сработают при любом добавлении, изменении или удалении данных.
- Добавьте действие — показать уведомление, обновить интерфейс, подтянуть связанные данные.
На ListView вместе с этим триггером отключите Infinite Scroll.
Работа офлайн
Если приложению на Supabase нужен офлайн-режим, посмотрите библиотеку PowerSync от команды PowerSync. Она держит локальную копию данных Supabase и досинхронизирует её, когда устройство снова выходит в сеть.