October CMS - 与非附件图像的延迟绑定
October CMS - deferred bindings with images that aren't attachments
我使用的是 October CMS,但在延迟绑定方面遇到了一些问题。
我有两个表:products 和 product_images。我已将我的后端表单分成两个选项卡,一个用于产品详细信息,一个用于产品图片:
我已正确设置关系并使用以下代码(部分放置)呈现产品图片列表:
<?= $this->relationRender('product_images'); ?>
图像选项卡如下所示:
当我尝试创建新图像时出现问题。从图像模态保存图像时,出现此异常:
我明白为什么会违反约束:主记录还没有保存,所以没有图像记录的id可以引用。换句话说,产品图片无法与产品关联,因为产品还不存在。
OctoberCMS documentation on deferred binding 暗示了一个解决方案。但文档还指出,
Deferred bindings are supported in the back-end Form behavior
automatically
的确,我没有明确写过任何后端表单处理代码。所以即使我想遵循延迟绑定的说明,我也不知道该把它放在哪里。有什么建议吗?
更新:
在我的 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 控制器。我不确定为什么。是这个问题吗?
我的错误是我对 product_images table 中的 product_id 列施加了约束:
$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('me_myplugin_products');
显然我需要允许该列为空。将其更改为有效:
$table->integer('product_id')->nullable();
我使用的是 October CMS,但在延迟绑定方面遇到了一些问题。
我有两个表:products 和 product_images。我已将我的后端表单分成两个选项卡,一个用于产品详细信息,一个用于产品图片:
我已正确设置关系并使用以下代码(部分放置)呈现产品图片列表:
<?= $this->relationRender('product_images'); ?>
图像选项卡如下所示:
当我尝试创建新图像时出现问题。从图像模态保存图像时,出现此异常:
我明白为什么会违反约束:主记录还没有保存,所以没有图像记录的id可以引用。换句话说,产品图片无法与产品关联,因为产品还不存在。
OctoberCMS documentation on deferred binding 暗示了一个解决方案。但文档还指出,
Deferred bindings are supported in the back-end Form behavior automatically
的确,我没有明确写过任何后端表单处理代码。所以即使我想遵循延迟绑定的说明,我也不知道该把它放在哪里。有什么建议吗?
更新:
在我的 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 控制器。我不确定为什么。是这个问题吗?
我的错误是我对 product_images table 中的 product_id 列施加了约束:
$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('me_myplugin_products');
显然我需要允许该列为空。将其更改为有效:
$table->integer('product_id')->nullable();