OctoberCMS Rainlab.Builder-与同一模型

时间:2017-07-30 20:30:25

标签: laravel orm octobercms octobercms-plugins

我正在开发一个用于管理动物的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!

1 个答案:

答案 0 :(得分:2)

不要使用id作为关系的主键,因为这不是好习惯。

实际上,这也会产生您所看到的问题。目前,您的模型使用id作为主要ID,母亲ID和父亲ID。你不能这样做。

mother_idfather_id添加到动物模型中,并将关系定义更改为:

public $hasOne = [
    'father' => [
        'Namespace\Animals\Models\Animal',
        'key' => 'father_id',
        'otherKey' => 'id'
    ],
    'mother' => [
        'Namespace\Animals\Models\Animal',
        'key' => 'mother_id',
        'otherKey' => 'id'
    ]
];

PS。在您的情况下,您不必定义keyotherKey,因为otherKey的默认值是" id"并且otherKey值是使用" _id"从关系名称创建的。后缀。