【问题标题】:Supabase, filter by column value of foreign key rowSupabase,按外键行的列值过滤
【发布时间】:2021-12-08 09:34:21
【问题描述】:

我想弄清楚如何在 supabase 中实现查询:

架构

CREATE TABLE cars 
(
    id SERIAL PRIMARY KEY,
    brand TEXT
);

CREATE TABLE stores 
(
    id SERIAL PRIMARY KEY,
    car INT REFERENCES car(id),
    name TEXT
);

我想获得所有拥有“x”品牌汽车的商店

在 Supabase 中我可以这样过滤:

let { data: stores } = await supabase
  .from('stores')
  .select("*")
  .eq('name', 'Ford car shop')


// Returns
{
  id: 123456,
  car:"Ford",
  name:"Ford car shop"
}

或像这样加入:

let { data: stores } = await supabase
  .from('stores')
  .select(`
    *,
    cars (
      brand
    )
  `)
  .eq('name', 'Ford car shop')

// Returns
{
  id: 123456,
  car:"Ford",
  cars: {
     id: 654321,
     brand: "Ford"
  }
  name:"Ford car shop"
}

但我如何使用 supabase sdk 按他们携带的汽车品牌过滤商店?

【问题讨论】:

    标签: sql supabase supabase-database


    【解决方案1】:

    您可以使用 supbase 提供的内置 postgrest api 来获取此信息。例如:

    /projects?select=*,clients!inner(*)&clients.id=eq.12
    

    这还没有添加到 supbase 客户端。

    补丁显示在这里:https://github.com/PostgREST/postgrest/releases/tag/v9.0.0

    【讨论】:

      【解决方案2】:

      编辑: Supabase 最近添加了此功能。新接受的答案如下。

      我做了更多研究,发现this is currently not possible。但是,它似乎已经实现,并将进入下一个 Supabase 版本。

      临时解决方案是使用视图,然后查询它们。

      CREATE VIEW stores_expanded AS
      SELECT
        stores.id,
        stores.name,
        cars.brand
      FROM
        stores
        LEFT JOIN cars
      ON
        stores.car = cars.id;
      
      let { data: stores } = await supabase
        .from('stores')
        .select("*")
        .eq('brand', 'x')
      

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 1970-01-01
        • 2016-07-12
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        相关资源
        最近更新 更多