我正在使用十月CMS,我在延迟绑定方面遇到了一些麻烦。
我有两个表:products和product_images。我将后端表单拆分为两个选项卡,一个用于产品详细信息,另一个用于产品图像:
我正确设置了我的关系并使用以下代码(放置在部分代码中)来呈现产品图片列表:
<?= $this->relationRender('product_images'); ?>
图像标签看起来像这样:
当我尝试创建新图像时会出现问题。从图像模式保存图像时,我得到以下异常:
我理解为什么会出现约束违规:主要记录尚未保存,因此没有用于引用图像记录的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控制器。我不知道为什么。这是问题吗?
答案 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();