Как в Eloquent запросить все значения некоторого атрибута, который имеет связь many-to-many?

Здравствуйте.
Встала такая задача - есть таблица товаров (products), есть таблица атрибутов (attributes), есть связующая (pivot) таблица, где product_id, attribute_id и некоторое значение на пересечении (value).
Как мне выдернуть все значения для атрибута под id = 1, 2 и т.д.?
То есть первый атрибут, к примеру, тип изделия. У него в pivot-таблице в значении value может что угодно стоять у каждого отдельного товара. Я хочу увидеть вообще все значения для attribute_id = 1 (тип изделия).
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
@jazzus
DB::table('pivot_table')->where('attribute_id',1)->pluck('value');
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Попробуй так:

Products.php
public function attributes()
{
return $this->hasManyThrough(Attributes::class, ProductsAttributes::class...); // тут надо загуглить правильный порядок ключей, не помню
}

$product = Products::first(); // берем продукт
$query = $product->attributes(); // создаем запрос SELECT FROM attributes WHERE exists({subquery});
$query->select('value')->where('id', 1)->get(); // все значения value, привязанные к первому продукту для аттрибута 1 (но здесь дичь какая-то обычно один атрибут на один продукт, а у тебя получается типа продукт может содержать аттрибут 1 несколько раз?)

Если нужно вообще все values для всех продуктов то сразу
Attributes::where('id', 1)->select('value')->get();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы