#php #cakephp #has-and-belongs-to-many
#php #cakephp #имеет и принадлежит многим
Вопрос:
У меня небольшая проблема. Моя товарная модель имеет и принадлежит многим ассоциациям с пользовательской моделью. В БД они связаны через commodities_users
таблицу. Итак, я хочу, чтобы Cakephp создавал новые записи в commodities_users
таблице в БД при создании нового товара. Но это не работает. Мой $this->request->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(
(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);
Моя версия CakePHP — 2.4. Взаимосвязь
var $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'joinTable' => 'commodities_users',
'foreignKey' => 'commodity_id',
'associationForeignKey' => 'user_id',
),
);
Что я делаю не так?
Комментарии:
1. Вы не указали свою версию cakephp, а также не отобразили свои отношения в коде модели и схеме таблицы. если вы поделитесь, вам будет легче помочь
2. @tarikul05, посмотри, я внес некоторые изменения.
3. Не могли бы вы добавить «public» вместо » var» в вашем отношении,
4. @tarikul05, с другими моделями это работает, поэтому я не думаю, что это проблема
5. @ВладиславВадимович можете ли вы сохранить данные в таблице товаров?
Ответ №1:
Вы не вводите правильные данные 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))
Для получения дополнительной информации см.
Ответ №2:
Хорошо, я решил это сам. Я был таким дураком и написал ассоциацию HABTM только в Commodity Model. Добавление того же для пользовательской модели устранило проблему. И $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'
));
Спасибо за ваше время!