0

私は 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 コントローラーがありません。理由はわかりません。それが問題ですか?

4

1 に答える 1

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();
于 2015-08-11T01:44:10.057 に答える