十月CMS - 延迟绑定与不是附件的图像

时间:2015-08-09 18:04:14

标签: forms octobercms

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

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

enter image description here

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

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

图像标签看起来像这样:

enter image description here

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

integrity constraint violation

我理解为什么会出现约束违规:主要记录尚未保存,因此没有用于引用图像记录的ID。换句话说,产品图像无法与产品相关联,因为产品尚不存在。

OctoberCMS documentation on deferred binding提示解决方案。但是文档还说明了,

  

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

实际上,我没有明确地编写任何后端表单处理代码。所以,即使我想按照延迟绑定的说明进行操作,我也不知道在哪里放置它。有什么建议吗?

更新:

在我的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控制器。我不知道为什么。这是问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

显然我需要允许该列为null。改变它是有效的:

$table->integer('product_id')->nullable();