1

私は2つのテーブル「ビジネス」を持っておりbusiness_categories、それらの関連付けは次のようになります

ビジネステーブル.php

$this->hasMany('SellerBusinessCategories', [
    foreignKey => 'business_id'
]);

business_categoriesと一緒にテーブルに複数のカテゴリを入力する必要がありますbusinesses

これは、入力フィールドがどのようにadd.ctp表示されているかです

<?= $this->Form->input('seller_business_categories._category_ids', [
        'options' => $categories,
        'multiple' => true,
        'type' => 'select',
        'class' => 'form-control select2',
        'label' => false
    ])
?>

しかし、これは次のようにエラーを出しています

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

フォームが送信されていません。への取り外しmultiple => trueと交換は正常に機能business_categories._category_idsbusiness.category_idています。

足りないものはありますか?

編集 2

SellerBusinessesController.php

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']);

}

デバッグ時: debug($this->request->data)、

'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'

}

]、

4

1 に答える 1

0

リストを取得するためのクエリが十分に明確ではないと思いました

<select>
 <option value="$AAA">$BBB</option>
</select>

keyField を値 ($AAA) として取得し、valueField をテキスト ビュー ($BBB) として取得する必要があります。

これは、ドロップダウン リストの都市リストを取得するための私の例です。

public function getcity()
{
    //Get model MCities
    $MCities = TableRegistry::get('MCities');

    $query = $MCities->find('list', [
        'keyField' => 'id', //consider this line
        'valueField' => 'city',//consider this line
        // 'order' => 'city'
    ]);

    //Add the default zero is "Select city"
    $data_init = ['0'=>'Select city'];

    $data = $data_init + $query->toArray();
    return $data;
}

それが役立つことを願っています!

編集#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 (値) がどこにあり、テキストがどこにあるかを知る必要があります。多分あなたのテーブルには多くの列(フィールド)があります。

于 2016-08-23T02:44:02.940 に答える