postgresql 如何创建多态关联的关系

bprjcwpo  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(255)

我有3个不同的表,其中之一是多态表。

CREATE TABLE pictures
(
id serial
imageable_type text not null
imageable_id integer not null
comment on table pictures is 'imageable_id belongs to users_id and products_id';
);

CREATE TABLE users
(
id serial
name string
);

CREATE TABLE products
(
id serial
name string
);

“这就是结构的样子。
Picture表通过imageable_id列与users表和products表关联。
如果是Rails风格的(没有任何FK引用),我如何在hausra中进行这样的查询

{
     products {
         name
         pictures {
              id
              name
         }
     }
}
i7uaboj4

i7uaboj41#

您必须像这样关联每个模型中的记录:

class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
end

class User < ApplicationRecord
  has_many :pictures, as: :imageable
end

class Product < ApplicationRecord
  has_many :pictures, as: :imageable
end

然后你可以从你的对象中查询图片,如下所示:
@ product.pictures或@ user.pictures
在graphql中,您可以创建PictureType并包含图片的所有字段。然后你可以创建一个ProductType来获取附加到产品上的图片,如下所示:

class Types::ProductType < Types::BaseObject
  field :pictures, [Types::PictureType], null: false

  def pictures
    object.pictures
  end
end

并获取您查询中的产品图片...

query {
  products {
    id
    name
    pictures {
      id
      url
    }
  }
}

供参考:https://guides.rubyonrails.org/association_basics.html#polymorphic-associations

相关问题