我使用
postgresql和yii2框架.
我收到了一条非常有趣的错误消息:
我收到了一条非常有趣的错误消息:
sqlSTATE[23502]: Not null violation: 7 ERROR: null value in column "id" violates not-null constraint DETAIL: Failing row contains (null,1,null,Demo,1998-01-01,345345435453453,f,10,1470477479,null).
但我检查了我的插入命令,那里没有“id”列!
INSERT INTO "advertiser" ("languages","type","name","display_name","title","about","birthday","gender","country_id","county_id","city_id","city_part","street","house_number","phone","public_email","public_url","motto","message","im_facebook","im_skype","has_viber","has_whatsapp","has_sms_response","visible_birthday","is_checked","status","version","user_id","created_at","updated_at") VALUES (NULL,'Demo','','1998-01-01',NULL,'345345435453453',FALSE,1470477479) RETURNING "id"
所以我真的无法理解这个错误信息.我没有发现Postgres或Yii尝试插入空ID值或什么.
顺便说一下,你可以找到结构
Table "public.advertiser" Column | Type | Modifiers | Storage | Stats target | Description -----------------------+------------------------+---------------------------------+----------+--------------+------------- id | integer | not null | plain | | user_id | integer | | plain | | country_id | integer | | plain | | county_id | integer | | plain | | city_id | integer | | plain | | district_id | integer | | plain | | type | smallint | | plain | | name | character varying(255) | not null | extended | | display_name | character varying(255) | default NULL::character varying | extended | | title | character varying(255) | default NULL::character varying | extended | | about | text | | extended | | birthday | date | not null | plain | | city_part | character varying(255) | default NULL::character varying | extended | | street | character varying(255) | default NULL::character varying | extended | | house_number | character varying(20) | default NULL::character varying | extended | | phone | character varying(15) | not null | extended | | public_email | character varying(255) | default NULL::character varying | extended | | public_url | character varying(255) | default NULL::character varying | extended | | motto | character varying(255) | default NULL::character varying | extended | | message | text | | extended | | gender | smallint | not null default 1 | plain | | im_facebook | character varying(255) | default NULL::character varying | extended | | im_skype | character varying(255) | default NULL::character varying | extended | | has_viber | boolean | not null default false | plain | | has_whatsapp | boolean | not null default false | plain | | has_sms_response | boolean | not null default false | plain | | visible_birthday | boolean | not null default false | plain | | status | smallint | not null default 10 | plain | | is_checked | boolean | not null default false | plain | | geo_latitude | double precision | | plain | | geo_longitude | double precision | | plain | | languages | integer[] | | extended | | created_at | integer | | plain | | updated_at | integer | | plain | | version | bigint | default 0 | plain | | Indexes: "advertiser_pkey" PRIMARY KEY,btree (id)
你有什么建议吗?我应该在哪里寻找问题?
解决方法
您没有为id插入值.由于您没有显式设置它,因此它隐式地给出了一个空值,当然,它不是主键列的有效值.您可以通过将此列定义为serial而不是普通的旧整数来避免这种情况,并将所有繁重的工作留给数据库.