在CakePHP 3中,多个select for hasMany关联

在CakePHP 3中,多个select for hasMany关联,cakephp,has-many,model-associations,cakephp-3.2,Cakephp,Has Many,Model Associations,Cakephp 3.2,我有两个表seller\u business和seller\u business\u categories。他们的联系如下 sellerbusinesstable.php $this->hasMany('SellerBusinessCategories', [ 'foreignKey' => 'seller_business_id' ]); $this->belongsTo('SellerBusinesses', [ 'foreignK

我有两个表
seller\u business
seller\u business\u categories
。他们的联系如下


sellerbusinesstable.php

    $this->hasMany('SellerBusinessCategories', [
        'foreignKey' => 'seller_business_id'
    ]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);
<?= $this->Form->create($sellerBusiness, ['type' => 'file']) ?>
    ...
    <?= $this->Form->input('categories', ['type' => 'select', 'options' => $categories, 'multiple' => 'select', 'label' => __('Categories')]) ?>
    ...
<?= $this->Form->end() ?>
SellerBusinessCategories.php

    $this->hasMany('SellerBusinessCategories', [
        'foreignKey' => 'seller_business_id'
    ]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);
<?= $this->Form->create($sellerBusiness, ['type' => 'file']) ?>
    ...
    <?= $this->Form->input('categories', ['type' => 'select', 'options' => $categories, 'multiple' => 'select', 'label' => __('Categories')]) ?>
    ...
<?= $this->Form->end() ?>
我使用一个表单在两个表中保存数据

<?= $this->Form->create($sellerBusiness, ['type' => 'file']) ?>
<?= $this->Form->input('company_name') ?>
<?= $this->Form->input('proof', ['type' => 'file']) ?>
<?= $this->Form->input('seller_business_categories._category_ids', ['multiple' => true, 'options' => $categories]) ?>
<?= $this->Form->button('submit', ['type' => 'submit']) ?>
<?= $this->Form->end() ?>
但这并不是将记录保存到
seller\u business\u categories
表中

从文件

但这是行不通的。有没有其他方法可以帮助
hasMany

调试($this->request->data)给出

'seller_business_categories' => [
        '_category_ids' => [
            (int) 0 => '1',
            (int) 1 => '2'
        ]
    ],
调试($sellerBusiness)补丁实体之后

object(App\Model\Entity\SellerBusiness) {

    'seller_id' => (int) 16,
    'company_name' => 'My company',
    'seller_business_categories' => [
        (int) 0 => object(App\Model\Entity\SellerBusinessCategory) {

            (int) 0 => '1',
            (int) 1 => '2',
            '[new]' => true,
            '[accessible]' => [
                '*' => true
            ],
            '[dirty]' => [
                (int) 0 => true,
                (int) 1 => true
            ],
            '[original]' => [],
            '[virtual]' => [],
            '[errors]' => [],
            '[invalid]' => [],
            '[repository]' => 'SellerBusinessCategories'

        }
    ],
    '[new]' => true,
    '[accessible]' => [
        '*' => true,
    ],
    '[dirty]' => [
        'seller_id' => true,
        'company_name' => true,
        'seller_business_categories' => true,
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'SellerBusinesses'

}
和错误

Error: SQLSTATE[HY000]: 
General error: 1364 Field 'category_id' doesn't have a default value in seller_business_categories table

卖方业务稳定

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
可分类的

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
//数据透视表必须按字母顺序排序

bin/cake bake migration CreateCategoriesSellerBusinesses seller_business_id:integer category_id:integer created modified
分类销售业务稳定

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
添加.ctp

    $this->hasMany('SellerBusinessCategories', [
        'foreignKey' => 'seller_business_id'
    ]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);
<?= $this->Form->create($sellerBusiness, ['type' => 'file']) ?>
    ...
    <?= $this->Form->input('categories', ['type' => 'select', 'options' => $categories, 'multiple' => 'select', 'label' => __('Categories')]) ?>
    ...
<?= $this->Form->end() ?>

卖方业务稳定

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
可分类的

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
//数据透视表必须按字母顺序排序

bin/cake bake migration CreateCategoriesSellerBusinesses seller_business_id:integer category_id:integer created modified
分类销售业务稳定

$this->belongsToMany('Categories');
$this->belongsToMany('SellerBusinesses', [
    'foreignKey' => 'category_id',
    'targetForeignKey' => 'seller_business_id',
    'joinTable' => 'categories_seller_businesses'
]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id',
    'joinType' => 'INNER'
]);
添加.ctp

    $this->hasMany('SellerBusinessCategories', [
        'foreignKey' => 'seller_business_id'
    ]);
$this->belongsTo('SellerBusinesses', [
    'foreignKey' => 'seller_business_id',
    'joinType' => 'INNER'
]);
<?= $this->Form->create($sellerBusiness, ['type' => 'file']) ?>
    ...
    <?= $this->Form->input('categories', ['type' => 'select', 'options' => $categories, 'multiple' => 'select', 'label' => __('Categories')]) ?>
    ...
<?= $this->Form->end() ?>

如果要使用多选表单,必须设置多对多关联,如何覆盖
hasMany
?设置
多对多
之前是否必须删除
hasMany
?一个卖家可以有多个业务,多个业务属于一个卖家。这就是为什么
有许多关系存在的原因。没有其他方法吗?正如我所说的,如果希望用户从关系表中选择更多的值,则需要创建多对多关系。还有另一种方法可以将多个值保存为元数据,但不推荐使用。如果要使用multiselect表单,必须设置多对多关联,如何覆盖
hasMany
?设置
多对多
之前是否必须删除
hasMany
?一个卖家可以有多个业务,多个业务属于一个卖家。这就是为什么
有许多关系存在的原因。没有其他方法吗?正如我所说的,如果希望用户从关系表中选择更多的值,则需要创建多对多关系。还有另一种方法可以将多个值保存为元数据,但不推荐使用。