제 3 자 서비스 호출에서 가져온 제품 데이터가 있는데, 그 다음에 개체를 만들어 내 MySQL DB에 저장합니다. 다음과 같이 내 모델은 다음과 같습니다cakephp 3.x 중첩 된 (깊은) 연관 저장
'제품'hasMany의 >> 'product_skus'hasMany의 >> 'product_sku_attributes'내 ProductsTable.php 초기화 () 메소드에서
내가 가진 :$this->hasMany('ProductSkus', [
'foreignKey' => 'product_no',
'dependent' => true,
]);
내 ProductSkusTable.php의 초기화() 메소드에서
내가 가진 :
$this->hasMany('ProductSkuAttributes', [
'foreignKey' => 'product_sku_id',
'bindingKey' => 'id',
'propertyName' => 'product_sku_attributes',
'dependent' => true,
]);
내 컨트롤러 : I 체크 두 배, 내 모든 필드가 내 테이블 엔티티 클래스와 같이 접근 설정
'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 = TableRegistry::get('Products');
$entity = $products->newEntity($product_data[0]);
$products->save($entity, [
'associated' => [
'ProductSkus',
'ProductSkus.ProductSkuAttributes',
]
]);
여기 내 엔티티 디버그에서 관련 조각입니다. 또한,이 시점에서 나는 단순성을 위해 하나의 제품 레코드 만 저장하려하고 있으므로, $ products-> newEntity().
내 데이터가 '제품'및 'product_skus'테이블에 저장되지만 'product_sku_products'에는 저장되지 않습니다. 누구든지 문제가 무엇인지 볼 수 있습니까? 동일한 foreignKey를 사용하지 않기 때문입니까?
내가 명확성을 위해 무엇을 제공 할 수 있는지 알려 주시기 바랍니다.
아는 물론-I는 동안 협회를 지정해야합니다
참조 : 깊은 중첩 협회는
associated
옵션을 통해이를 지정하는 즉 필요 ** 저장하기 전에 ** 엔티티 생성. 이제는 분명해 보입니다. 고마워요, 고마워요! 시간을내어 주셔서 감사합니다. – stoff안녕하세요 @ndm 및 @stoff, 문제의 직유 유형이 있습니다. 나는이 ans를 따라 갔고 또한 문서를 읽었다. 그것은 나를 위해 작동하지 않습니다. 제 경우에는 company => hasMany AppVersions 및 AppVersions hasMany => Assistance and Assistances => 많은 AssistanceApplicationTypes.'을 포함하고 있습니다. 이제 compnay, appVersion, Assistance는 저장할 수 있지만 Assistances.AssistanceApplicationTypes는 저장할 수 없습니다. 'patchEntity()'후에도'Assistances.AssistanceApplicationTypes'는 여전히 객체가 아닌 array()로 남아 있습니다. 다른 것들은 대상이되고 있습니다. 도와 줄 수있어? – user2480902
@ user2480902 아마도'associated' 옵션을 적절히 설정하지 않았거나 테이블이나 연결조차 제대로 설정되지 않았을 것입니다. – ndm