2016-08-21 2 views
1

У меня есть две таблицы «бизнес» и business_categories и их ассоциации, какCakePHP множественного выбора не работает

BusinessesTable.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_ids на business.category_id работает нормально.

Есть что-то не хватает?

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

} 

отладки: отладки ($ this-> request-> данные), дает

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

} 

],

+0

Добавить код вашего контроллера – Salines

+0

добавил код для контроллера в редакторе 2 –

ответ

0

Я думал, что ваш запрос, чтобы получить список не был достаточно ясно

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

Вы должны получить KEYFIELD как значение ($ ААА) и valueField в текстовом виде ($ ВВВ).

Это мой пример получения списка городов для моего раскрывающегося списка.

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; 
} 

Надеюсь, что это поможет!

EDIT # 2

После моего кода. Когда я отлажу, это будет показано ниже (есть вьетнамские города)

Это моя база данных. enter image description here

И это мой отладочный запрос после запроса.

[ 
    (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 (значение) и где находится текст. Из-за возможно, что в вашей таблице будет много столбцов (полей).

+0

, пожалуйста, посмотрите результат отладки ($ this-> request-> data). Я не думаю, что проблема в категории id –

+0

Возможно, вы неправильно поняли мое упоминание. Из-за вашей показанной ошибки «1364 поле« category_id »не имеет значения по умолчанию в business_categories», поэтому я считаю, что мои идеи верны. Пожалуйста, проверьте мой EDIT # 2 для более ясного. – TommyDo

Смежные вопросы