Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Есть вот такой запрос
/**
* Find product variation by it attribute
*
* @param array $attributes
*/
private function setVariation(array $attributes = [])
{
$this->variation = ProductAttribute::whereHas('combinations', function($q) use($attributes){
$q->whereIn('product_attribute_combination.attribute_id', $attributes);
})->first();
dd($this->variation, $attributes);
}
Массив $attributes выглядит так:
array:2 [
0 => "8"
1 => "13"
]
Вот сама таблица product_attribute_combination
http://www.fotolink.su/pic_b/72078c2b80 … b369fe.png
Ожидаю получить product_attribute_id 32, а он возвращает 9. Почему?
Если поставить вместо first(), get(). то вернется коллекция из 10 элементов. Как можно сделать строгий запрос?
Не в сети
Не совсем понятно что вам нужно. first - возвращает первый элемент массива. get - коллекцию по заданному параметру.
Что именно нужно выбрать?
Не в сети
- Не совсем понятно что вам нужно. first — возвращает первый элемент массива. get — коллекцию по заданному параметру.Что именно нужно выбрать?
Вот есть таблица product_attribute_combination, она является связной таблицей между product_variation и attributes
В этой таблице такая структура и заполненые данные
id | attribute_id | product_variation_id 1 1 9 2 2 9 3 1 10 4 3 10 5 2 11 6 3 11 ...
Я хочу получить product_variation_id как бы сказать основываясь что ли на пришедших от пользователя айдишников attribute_id.
Допустим пришли 2 айдишника.
array:2 [ 0 => "2" 1 => "3" ]
ProducVariations::whereHas('combinations', function($q) use($attributes){ // $attributes это тот массив который выше
$q->whereIn('product_attribute_combination.attribute_id', $attributes);
})->first();
по идеи я должен был получить product_variation_id #11 тат как у него attribute_id #2 и #3, но запрос возвращает не 11, а 9. Почему? Будто whereIn('product_attribute_combination.attribute_id', $attributes) возвращает найденную запись по первому числу в массиве, а второе число игнорирует.
Не в сети
У тебя в таблице есть повторения attribute_id.
для attribute_id = 2, product_variation_id = [9, 11]
->first(); как раз и возвращает первое вхождение - product_variation_id = 9.
если нужно получить product_variation_id который соответствует attribute_id = 2 И attribute_id = 3, то нужен не whereIN,
а ->where() .. ->andWhere()...
Не в сети
Не в сети
Страницы 1