Как в Eloquent запросить все значения некоторого атрибута, который имеет связь many-to-many?
Здравствуйте.
Встала такая задача - есть таблица товаров (products), есть таблица атрибутов (attributes), есть связующая (pivot) таблица, где product_id,attribute_id и некоторое значение на пересечении (value).
Как мне выдернуть все значения для атрибута под id = 1, 2 и т.д.?
То есть первый атрибут, к примеру, тип изделия. У него в pivot-таблице в значении value может что угодно стоять у каждого отдельного товара. Я хочу увидеть вообще все значения для attribute_id = 1 (тип изделия).
Проблема конкретно в eloquent или в составлении запроса? Так-то вроде запрос относительно простой: выбрать уникальные значения value из pivot где attribute_id = 1
muhasa, ну, полагаю местная публика просто привыкла к тому, что вопрошающие чаще всего заинтересованы в получении ответа и не пропадают на 20 часов, поэтому тебя и троллят. Могу ошибаться.
По вопросу - там ниже дали ответ. Хотя мне кажется там надо distinct добавить. Сам я в элок не умею, думал проблема с составлением sql-подобного запроса
Никита Полевой, да в sql-е это на раз два делается...
А пропал потому, что вопрос из теоретической серии, на конструкторе давно уже сделал, просто странно, что на stackoverflow об этом особо ничего не нашел
А троли пусть идут лесом, это их дорога.
jazzus, тебе да, мне - нет, тему я не кинул, возможности не было сразу ответить. Но сейчас в теме поставлена точка и всех, кто откликнулся, а не писал херню, благодарю!
но смысла в этом нет, правильный вариант запросом выше. Обращаться к самим отношениям, используя withPivot и т.д. также нет смысла т.к. данный запрос (values у атрибута) к отношениям моделей не относится
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();