cakephp多重选择不工作

cakephp多重选择不工作,cakephp,cakephp-3.2,validates-associated,Cakephp,Cakephp 3.2,Validates Associated,我有两个表“business”和business\u categories,它们的关联如下 BusinessesTable.php $this->hasMany('SellerBusinessCategories', [ foreignKey => 'business_id' ]); public function add() { $sellerBusiness = $this->SellerBusinesses->newEntity(); if

我有两个表“business”和
business\u categories
,它们的关联如下

BusinessesTable.php

$this->hasMany('SellerBusinessCategories', [
    foreignKey => 'business_id'
]);
public function add()
{
    $sellerBusiness = $this->SellerBusinesses->newEntity();
    if ($this->request->is('post')) {
        $sellerBusiness->seller_id = $this->Auth->user('id');
        $sellerBusiness = $this->SellerBusinesses->patchEntity($sellerBusiness, $this->request->data, [
          'associated' => [
            'SellerBusinessCategories'
          ]
        ]);
        if ($this->SellerBusinesses->save($sellerBusiness)) {
            $this->Flash->success(__('The seller business has been saved.'));

            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The seller business could not be saved. Please, try again.'));
        }
    }
    $categories = $this->SellerBusinesses->SellerBusinessCategories->Categories->find('list', ['limit' => 200]);
    $sellers = $this->SellerBusinesses->Sellers->find('list', ['limit' => 200]);
    $this->set(compact('sellerBusiness', 'sellers', 'categories'));
    $this->set('_serialize', ['sellerBusiness']);

}
我必须在
业务
表中输入多个类别以及
业务

这就是输入字段在
add.ctp
视图中的显示方式

<?= $this->Form->input('seller_business_categories._category_ids', [
        'options' => $categories,
        'multiple' => true,
        'type' => 'select',
        'class' => 'form-control select2',
        'label' => false
    ])
?>
而且表格没有提交。删除
multiple=>true
并将
business\u类别替换为
business.category\u id
工作正常

少了什么吗

编辑2

sellerbusinesscontroller.php

$this->hasMany('SellerBusinessCategories', [
    foreignKey => 'business_id'
]);
public function add()
{
    $sellerBusiness = $this->SellerBusinesses->newEntity();
    if ($this->request->is('post')) {
        $sellerBusiness->seller_id = $this->Auth->user('id');
        $sellerBusiness = $this->SellerBusinesses->patchEntity($sellerBusiness, $this->request->data, [
          'associated' => [
            'SellerBusinessCategories'
          ]
        ]);
        if ($this->SellerBusinesses->save($sellerBusiness)) {
            $this->Flash->success(__('The seller business has been saved.'));

            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The seller business could not be saved. Please, try again.'));
        }
    }
    $categories = $this->SellerBusinesses->SellerBusinessCategories->Categories->find('list', ['limit' => 200]);
    $sellers = $this->SellerBusinesses->Sellers->find('list', ['limit' => 200]);
    $this->set(compact('sellerBusiness', 'sellers', 'categories'));
    $this->set('_serialize', ['sellerBusiness']);

}
关于调试:调试($this->request->data),给出


],

我认为您获取列表的查询不够清晰

<select>
 <option value="$AAA">$BBB</option>
</select>
希望能有帮助

编辑#2

遵循我的代码。当我调试时,它将显示如下(有越南城市)

这是我的数据库。

这是我的查询后调试

[
    (int) 0 => 'Select city',
    (int) 1 => 'Thành phố Hà Nội',
    (int) 2 => 'Tỉnh Hà Giang',
    (int) 3 => 'Tỉnh Cao Bằng',
    (int) 4 => 'Tỉnh Bắc Kạn',
    (int) 5 => 'Tỉnh Tuyên Quang',
    (int) 6 => 'Tỉnh Lào Cai',
    (int) 7 => 'Tỉnh Điện Biên',
    (int) 8 => 'Tỉnh Lai Châu',
    (int) 9 => 'Tỉnh Sơn La',
    (int) 10 => 'Tỉnh Yên Bái',
]

必须定义选择框才能知道id(值)和文本的位置。因为在您的表中可能会有许多列(字段)。

我认为您获取列表的查询不够清晰

<select>
 <option value="$AAA">$BBB</option>
</select>
希望能有帮助

编辑#2

遵循我的代码。当我调试时,它将显示如下(有越南城市)

这是我的数据库。

这是我的查询后调试

[
    (int) 0 => 'Select city',
    (int) 1 => 'Thành phố Hà Nội',
    (int) 2 => 'Tỉnh Hà Giang',
    (int) 3 => 'Tỉnh Cao Bằng',
    (int) 4 => 'Tỉnh Bắc Kạn',
    (int) 5 => 'Tỉnh Tuyên Quang',
    (int) 6 => 'Tỉnh Lào Cai',
    (int) 7 => 'Tỉnh Điện Biên',
    (int) 8 => 'Tỉnh Lai Châu',
    (int) 9 => 'Tỉnh Sơn La',
    (int) 10 => 'Tỉnh Yên Bái',
]

必须定义选择框才能知道id(值)和文本的位置。因为您的表中可能有许多列(字段)。

添加控制器代码在编辑2中添加控制器代码在编辑2中添加控制器代码请查看调试结果($this->request->data)。我不认为问题出在分类上,也许你误解了我提到的。因为您显示的错误是“1364字段‘category_id’在business_categories中没有默认值”,所以我认为我的想法是正确的。请查看我的编辑#2了解更多信息。请查看调试结果($this->request->data)。我不认为问题出在分类上,也许你误解了我提到的。因为您显示的错误是“1364字段‘category_id’在business_categories中没有默认值”,所以我认为我的想法是正确的。请查看我的编辑2以了解更多信息。