我正在开发一个用于管理动物的10月CMS插件(使用rainlab.builder)。 动物有几个领域和关系。每只动物都有父亲和母亲的动物。但是当我试图保护我的动物时,会出现以下错误:
事件记录:
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048
Column 'id' cannot be null in dir/website/vendor/laravel/framework/src/
Illuminate/Database/Connection.php:413
插件动物形式:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id'
cannot be null (SQL: update `prefix_animals_animal` set `id` = where
`prefix_animals_animal`.`id` = 1 and `prefix_animals_animal`.`id` is
not null)" on line 666 of dir/website/vendor/laravel/framework/
src/Illuminate/Database/Connection.php
当我使用关系(child - > father,child - > mother)时,错误才会出现。
我已经实现了以下hasOne - 与动物模型的关系:
/* Relation */
public $hasOne = [
'father' => [
'Namespace\Animals\Models\Animal',
'key' => 'id',
'otherKey' => 'id'
],
'mother' => [
'Namespace\Animals\Models\Animal',
'key' => 'id',
'otherKey' => 'id'
]
];
这是 field.yaml :
中的字段father:
label: Father
oc.commentPosition: ''
nameFrom: name
descriptionFrom: description
emptyOption: 'No father'
span: left
type: relation
mother:
label: Mother
span: right
oc.commentPosition: ''
nameFrom: name
descriptionFrom: description
emptyOption: 'No mother'
type: relation
如果有人能解决这些关系,我会很高兴。 Cheerio!
答案 0 :(得分:2)
不要使用id
作为关系的主键,因为这不是好习惯。
实际上,这也会产生您所看到的问题。目前,您的模型使用id
作为主要ID,母亲ID和父亲ID。你不能这样做。
将mother_id
和father_id
添加到动物模型中,并将关系定义更改为:
public $hasOne = [
'father' => [
'Namespace\Animals\Models\Animal',
'key' => 'father_id',
'otherKey' => 'id'
],
'mother' => [
'Namespace\Animals\Models\Animal',
'key' => 'mother_id',
'otherKey' => 'id'
]
];
PS。在您的情况下,您不必定义key
和otherKey
,因为otherKey
的默认值是" id"并且otherKey
值是使用" _id"从关系名称创建的。后缀。