Ассоциация HasMany по ассоциированной (принадлежащей через) модели

Я пытаюсь заставить эту вещь работать:

Orders belongsToMany Products через ProductsOrders

ProductsOrders имеет составной ключ (order_id, product_id) — на этом этапе все работает отлично.

Что я хочу добавить новую ассоциацию (ProductsOrders имеет много Extras) потому что продукт может иметь несколько данных (соусы, стиль выпечки, напитки, …).

Итак, я создал Extras модель с:

$this->belongsTo('Orders', [
'foreignKey' => 'order_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Products', [
'foreignKey' => 'product_id',
'joinType' => 'INNER'
]);

И я добавил следующее в модели ProductsOrders

 $this->hasMany("Extras", [
'foreignKey' => [
'order_id',
'product_id'
],
'bindingKey' => [
'order_id',
'product_id'
]
]);

При исправлении Order Entity это кажется правильным: (упрощенная версия)

object(App\Model\Entity\Order) {
'establishment_id' => (int) 1,
'state_id' => (int) 20,
'products' => [
(int) 0 => object(App\Model\Entity\Product) {

'id' => (int) 32,
'establishment_id' => (int) 1,
'category_id' => (int) 11,
'_joinData' => object(App\Model\Entity\OrdersProduct) {

'quantity' => (int) 4,
'price' => (float) 9,
'extras' => [
(int) 0 => object(App\Model\Entity\Extra) {

'title' => 'Sauces',
'choice' => 'Mayonaise',
'price' => (float) 0,
'[new]' => true,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'title' => true,
'choice' => true,
'price' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Extras'

}
],
'[new]' => true,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'quantity' => true,
'price' => true,
'tva' => true,
'extras' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'OrdersProducts'

},
}
]
}

Проблема в том, что при сохранении (с успехом) данных Extras в таблице нет … Это печально.

Где я ошибся? Или это все еще возможно?

Спасибо в авданс

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]