0

我正在使用十月 CMS,但在延迟绑定方面遇到了一些问题。

我有两个表:products 和 product_images。我将后端表单分成两个选项卡,一个用于产品详细信息,一个用于产品图片:

在此处输入图像描述

我正确设置了我的关系,并使用以下代码(放置在部分代码中)来呈现产品图像列表:

<?= $this->relationRender('product_images'); ?>

图像选项卡如下所示:

在此处输入图像描述

当我尝试创建新图像时会出现问题。从图像模式中保存图像时,出现以下异常:

违反完整性约束

我明白为什么会违反约束:主记录尚未保存,因此图像记录没有可引用的 id。换句话说,产品图像无法与产品相关联,因为产品尚不存在。

关于延迟绑定的 OctoberCMS文档暗示了一个解决方案。但文件还指出,

后端表单行为自动支持延迟绑定

事实上,我还没有明确编写任何后端表单处理代码。因此,即使我想遵循有关延迟绑定的说明,我也不知道该放在哪里。有什么建议么?

更新:

在我的 config_relations.yaml 文件中,我将 deferredBinding 设置为 true,但没有任何区别:

product_images:
    label: Image
    deferredBinding: true

我的产品控制器看起来像:

class Products extends \Backend\Classes\Controller 
{
    public $implement = [
        'Backend.Behaviors.FormController',
        'Backend.Behaviors.ListController',
        'Backend.Behaviors.RelationController'
    ];

    public $formConfig = 'config_form.yaml';
    public $listConfig = 'config_list.yaml';
    public $relationConfig = 'config_relation.yaml';

    public function __construct()
    {
        parent::__construct();
        BackendMenu::setContext('MyPlugin.Products', 'products');
    }

    public function index()
    {
        $this->makeLists();
        $this->makeView('index');
    }

我没有 product_images 控制器。我不确定为什么。是这个问题吗?

4

1 回答 1

1

我的错误是我对 product_images 表中的 product_id 列设置了约束:

$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('me_myplugin_products');

显然我需要允许该列为空。将其更改为此有效:

$table->integer('product_id')->nullable();
于 2015-08-11T01:44:10.057 回答