У меня есть данные о продуктах, поступающие от стороннего вызова службы, которые я затем создаю и сохраняю в моей базе данных MySQL. Мои модели заключаются в следующем:cakephp 3.x Сохранение вложенных (глубоких) ассоциаций
hasMany 'продукты' >> hasMany 'product_skus' >> '' product_sku_attributes
В моем методе ProductsTable.php инициализации() У меня есть:
$this->hasMany('ProductSkus', [
'foreignKey' => 'product_no',
'dependent' => true,
]);
В моем методе ProductSkusTable.php Initialize() у меня есть:
$this->hasMany('ProductSkuAttributes', [
'foreignKey' => 'product_sku_id',
'bindingKey' => 'id',
'propertyName' => 'product_sku_attributes',
'dependent' => true,
]);
Мой контроллер:
$products = TableRegistry::get('Products');
$entity = $products->newEntity($product_data[0]);
$products->save($entity, [
'associated' => [
'ProductSkus',
'ProductSkus.ProductSkuAttributes',
]
]);
Вот это отношение отрывок из моей сущности отладки:
'product_skus' => [
(int) 0 => object(App\Model\Entity\ProductSkus) {
'sku' => 'BDS1401H',
'sku_price' => (float) 366.76,
'sku_weight' => (float) 38.1,
'sku_img_main' => '',
'sku_img_large' => '',
'sku_img_default' => false,
'is_default' => true,
'product_sku_attributes' => [
(int) 0 => [
'product_no' => (int) 23200,
'sku' => 'BDS1401H',
'attribute_name' => 'Front Sway Bar Links',
'option_name' => 'Stock'
],
(int) 1 => [
'product_no' => (int) 23200,
'sku' => 'BDS1401H',
'attribute_name' => 'Shock Options',
'option_name' => 'NX2 Series'
],
(int) 2 => [
'product_no' => (int) 23200,
'sku' => 'BDS1401H',
'attribute_name' => 'Steering Stabilizer Options',
'option_name' => 'Stock'
]
],
'[new]' => true,
'[accessible]' => [
'*' => true,
'id' => true
],
'[dirty]' => [
'sku' => true,
'sku_price' => true,
'sku_weight' => true,
'sku_img_main' => true,
'sku_img_large' => true,
'sku_img_default' => true,
'is_default' => true,
'product_sku_attributes' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'ProductSkus'
},
(int) 1 => object(App\Model\Entity\ProductSkus) { ...
я в два раза проверил, и все мои поля установлены как доступны в моих классах таблиц сущностей. Кроме того, на данный момент я просто пытаюсь сохранить одну запись продукта для простоты, поэтому $ products-> newEntity().
Мои данные без проблем сохраняются в таблицах «товары» и «product_skus», но не «product_sku_products». Кто-нибудь может понять, в чем проблема? Это потому, что я не использую тот же foreignKey?
Пожалуйста, дайте мне знать, что еще я могу предоставить для ясности.
Ааа, конечно, мне нужно указать ассоциации в течение создание сущностей ** до ** сохранения. Кажется, сейчас так очевидно. Спасибо Спасибо! Я ценю, что вы нашли время :) – stoff
Здравствуйте, @ndm и @stoff, у меня есть аналогичный тип проблемы. Я следил за этим и читал документацию. Это не работает для меня. В моем случае 'company => hasMany AppVersions и AppVersions hasMany => Ассистенты и ассистенты => имеет много типов AssistanceApplicationTypes.' до сих пор я могу сохранить compnay, appVersion, Assistance, но не (Assistances.AssistanceApplicationTypes). после 'patchEntity()' 'Assistances.AssistanceApplicationTypes' остается массивом(), не являющимся объектом. Другие являются объектами. Можете ли вы, парень, помочь мне? – user2480902
@ user2480902 Возможно, вы неправильно настроили опцию 'related', или, может быть, даже таблицы или ассоциации не настроены должным образом. – ndm