私は 10 月の CMS を使用していますが、遅延バインディングに問題があります。
products と product_images の 2 つのテーブルがあります。バックエンド フォームを 2 つのタブに分割しました。1 つは製品の詳細用、もう 1 つは製品の画像用です。
関係を正しく設定し、次のコード (部分的に配置) を使用して製品画像リストをレンダリングします。
<?= $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 コントローラーがありません。理由はわかりません。それが問題ですか?