SQLBoilerの使い方
has both field and method named ID
のエラーが出る場合、
あるテーブル同士のリレーションがhasOne
になっているケースです。
Table "public.spans"
Column | Type | Collation | Nullable | Default
----------------+--------------------------+-----------+----------+---------
id | character varying(40) | | not null |
highlight_text | text | | not null |
category_id | character varying(40) | | not null |
page_num | integer | | not null |
corrdinate | character varying(255) | | |
created_at | timestamp with time zone | | not null | now()
Indexes:
"spans_pkey" PRIMARY KEY, btree (id)
"idx_spans_category_id" btree (category_id)
Foreign-key constraints:
"spans_annotation_id_fkey" FOREIGN KEY (id) REFERENCES annotations(id)
"spans_category_id_fkey" FOREIGN KEY (category_id) REFERENCES categories(id)
これはspans
というテーブルがannotations
のIDをprimary keyとして参照しています。
これだと、sqlboiler
で生成した、モデルがID
がfieldとmethodがかぶってしまうというケースが起こります。
これはこれで修正されれば良いですが、対処法としては、
spans
テーブルのid
をannotation_id
というように、参照しているテーブルの名前に変更してやるのが一番簡単な解決策となります。
よって
Table "public.spans"
Column | Type | Collation | Nullable | Default
----------------+--------------------------+-----------+----------+---------
annotation_id | character varying(40) | | not null |
highlight_text | text | | not null |
category_id | character varying(40) | | not null |
page_num | integer | | not null |
corrdinate | character varying(255) | | |
created_at | timestamp with time zone | | not null | now()
Indexes:
"spans_pkey" PRIMARY KEY, btree (annotation_id)
"idx_spans_category_id" btree (category_id)
Foreign-key constraints:
"spans_annotation_id_fkey" FOREIGN KEY (annotation_id) REFERENCES annotations(id)
"spans_category_id_fkey" FOREIGN KEY (category_id) REFERENCES categories(id)
このようなid
だったprimary keyがannotation_id
という名前に変更したテーブル設計になればエラーも起こらなくなります。