Мы создаем новую систему продуктов в среде Laravel, где у нас возникла проблема с настройкой отношений между моделями и опорными точками.Ситуация может отображаться следующим образом:
Продукт может иметь определенные атрибуты, такие как, например, Цвет.Это сохраняется в таблице morph_has_attributes
.Однако мы также хотели бы установить значение этого атрибута 'color'.Это можно легко сделать, имея attribute_value_id
в таблице morph_has_attributes
.Тем не менее, мы хотели бы иметь возможность привязать несколько значений к атрибуту, поэтому существует отношение «многие ко многим» между сводкой и значением атрибута.
Пример: я продаю автомобиль (продукт), который имеет несколько цветов (атрибут): зеленый и красный (значения).
Я обнаружил следующую статью что похоже на мою ситуацию, однако, в их случае AttributeValue имеет ключ вместо MorphHasAttributeValue.
Моя цель состоит в том, чтобы установить отношение между Product (или Search), которое похоже из-за отношения Polymorphic) и AttributeValues.
Используемые в настоящее время отношения выглядят следующим образом:
Класс продукта
class Product extends Model
{
/**
* Get all of the attributeTypes for the product.
*/
public function attributeTypes()
{
return $this->morphToMany('App\AttributeType', 'morph', 'morph_has_attributes');
}
/**
* Get all of the morphHasAttributeValues pivots for the product.
*/
public function morphHasAttributeValues()
{
return $this->hasMany('App\Pivots\MorphHasAttributeValue')
->using('App\Pivots\MorphHasAttribute');
}
/**
* The attributeValues that are bound to this product .
*/
public function attributeValues()
{
// How do I do this?
}
}
Класс MorphHasAttribute
class MorphHasAttribute extends MorphPivot
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'morph_has_attributes';
public function products()
{
return $this->belongsTo('App\Product');
}
public function searches()
{
return $this->belongsTo('App\Search');
}
public function productHasAttributeValues()
{
return $this->belongsTo('App\ProductHasAttributeValue');
}
public function attributeValues()
{
return $this->belongsToMany('App\AttributeValue', 'morph_has_attribute_value');
}
}
Класс MorphHasAttributeValue
class MorphHasAttributeValue extends Pivot
{
public function products()
{
return $this->belongsToMany('App\Product')
->using('App\Pivots\MorphHasAttribute');
}
}
Класс AttributeValue
class AttributeValue extends Model
{
//
}