2016-10-13 3 views
0

У меня есть небольшая проблема. Модель My Commodity имеет и относится ко многим ассоциациям с моделью пользователя. В БД они связаны через таблицу commodities_users. Итак, я хочу, чтобы Cakephp создавал новые записи в таблице commodities_users в БД при создании нового Commodity. Но это не сработает. Моего $this->request->data массив (если я хочу экономить один новый товар) выглядит следующим образомСохранение связанных с HABTM данных в cakephp

array(
    'Commodity' => array(
     'commodity_type' => '0', 
     'commoditygroup_id' => '', 
     'name' => 'asdfad', 
     'code' => '', 
     'ean' => '', 
     'costprice' => '', 
     'saleprice' => '12512,123', 
     'default_vatrate' => '', 
     'saleprice_gross' => '', 
     'sync_cashconnector' => '1', 
     'commoditysetting_id' => '', 
     'default_amount_enabled' => '0', 
     'default_amount' => '', 
     'stock_min' => '', 
     'stock' => '', 
     'comment' => '' 
    ), 
    'User' => array(
     (int) 0 => array(
      'id' => '23' 
     ), 
     (int) 1 => array(
      'id' => '24' 
     ), 
     (int) 2 => array(
      'id' => '30' 
     ), 
     (int) 3 => array(
      'id' => '31' 
     ) 
)); 

И я спасаю от модели Товарного этого пути $this->Commodity->saveAll($this->request->data);

My CakePHP версия 2.4. Отношения

var $hasAndBelongsToMany = array(
      'User' => array(
        'className' => 'User', 
        'joinTable' => 'commodities_users', 
        'foreignKey' => 'commodity_id', 
        'associationForeignKey' => 'user_id', 
      ), 
    ); 

Что я делаю неправильно?

+0

Вы не упомянули свою версию cakephp, а также не отображали свои отношения по схеме модели и схеме таблиц. если вы поделитесь им, вам будет проще помочь вам – tarikul05

+0

@ tarikul05, посмотрите, я внес некоторые изменения. – Vladislav

+0

Не могли бы вы добавить ** «публичный» ** instate ** «var» ** в ваших отношениях, – tarikul05

ответ

0

Хорошо, я решил это сам. Я был просто так dumm и написал ассоциацию HABTM только в товарной модели. Добавление же для модели пользователя устраняет проблему. И массив $this->reuqest->data выглядел так

array(
    'Commodity' => array(
     'commodity_type' => '0', 
     'commoditygroup_id' => '', 
     'name' => 'asdfad', 
     'code' => '', 
     'ean' => '', 
     'costprice' => '', 
     'saleprice' => '12512,123', 
     'default_vatrate' => '', 
     'saleprice_gross' => '', 
     'sync_cashconnector' => '1', 
     'commoditysetting_id' => '', 
     'default_amount_enabled' => '0', 
     'default_amount' => '', 
     'stock_min' => '', 
     'stock' => '', 
     'comment' => '' 
    ), 
    'User' => array(
     'id' => array(
      '0' => '23', 
      '1' => '24', 
      '2' => '25' 

)); 

Спасибо за ваше время!

0

Вы не подаете правильные данные в saveAll().

В соответствии с Документами CakePHP, правильный способ структурирования данных выглядит следующим образом:

array(
    array(
     'Commodity' => array(
      'commodity_type' => '0', 
      'commoditygroup_id' => '', 
      'name' => 'asdfad', 
      'code' => '', 
      'ean' => '', 
      'costprice' => '', 
      'saleprice' => '12512,123', 
      'default_vatrate' => '', 
      'saleprice_gross' => '', 
      'sync_cashconnector' => '1', 
      'commoditysetting_id' => '', 
      'default_amount_enabled' => '0', 
      'default_amount' => '', 
      'stock_min' => '', 
      'stock' => '', 
      'comment' => '' 
     ), 
     'User' => array(
      'User' => array('23','24','30','31') 
     ) 
    ) 
); 

Вы сохраните данные с:

$this->Commodity->saveAll($this->request->data, array('deep' => true)) 

Для получения дополнительной справки см

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