Итак, у меня четыре таблицы.
products
skus
sku_attribute
attributes
Каждый product
имеет много sku
с.Каждый sku
имеет много attribute
с.И каждый attribute
может иметь несколько sku
связанных с ним.sku_attribute
- это сводная таблица для отношений многих ко многим между sku
с и attribute
с.
Это прекрасно работает!Но теперь, как мне получить все attribute
, связанные с product
?
Следующий код работал для меня.
public function attributes()
{
return $this->skus->flatMap(function ($sku) {
return $sku->attributes;
});
}
Но я получаю ошибку, потому что это нене возвращает отношения, а скорее коллекцию.
Я также пытался использовать решение , найденное здесь .Но я не мог заставить его работать должным образом, потому что их модель немного отличается от моей.(У каждого продукта есть много skus, а не наоборот.)
Другим решением было включить третий столбец в sku_attribute
s для product_id
, но я не смог найти способ по умолчанию заполнить это дляsku->product->id
по методу $sku->attach($attribute_id)
.Вместо этого мне придется каждый раз вручную вызывать это, например $sku->attach($attribute_id, ['product_id' => $sku->product->id])
.