cakephp 3.x Salvando associação aninhada (profunda)

Eu tenho dados do produto provenientes de uma chamada de serviço de terceiros e, em seguida, crio um objeto e salvo no meu banco de dados MySQL. Meus modelos são os seguintes:

'produtos' hasMany >> 'product_skus' hasMany >> 'product_sku_attributes'

relacionamentos de tabela

No meu método ProductsTable.php initialize () eu tenho:

$this->hasMany('ProductSkus', [
    'foreignKey' => 'product_no',
    'dependent' => true,
]);

No meu método ProductSkusTable.php initialize () eu tenho:

$this->hasMany('ProductSkuAttributes', [
    'foreignKey' => 'product_sku_id',
    'bindingKey' => 'id',
    'propertyName' => 'product_sku_attributes',
    'dependent' => true,
]);

Meu controlador:

$products = TableRegistry::get('Products');
$entity = $products->newEntity($product_data[0]);
$products->save($entity, [
    'associated' => [
        'ProductSkus',
        'ProductSkus.ProductSkuAttributes',
    ]
]);

Aqui está o snippet relevante do meu debug de entidade:

'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) { ...

Eu dobrei a verificação e todos os meus campos estão definidos como acessíveis nas classes de entidade da tabela. Além disso, neste momento, estou apenas tentando salvar um registro de produto por simplicidade, portanto $ products-> newEntity ().

Meus dados estão salvos nas tabelas 'products' e 'product_skus' sem problemas, mas não em 'product_sku_products'. Alguém pode ver qual é o problema? É porque não estou usando a mesma chave estrangeira?

Informe-me o que mais posso fornecer para esclarecer.

questionAnswers(1)

yourAnswerToTheQuestion