случай запроса с Laravel и Eloquent ORM - PullRequest
0 голосов
/ 26 апреля 2018

Просто я хочу получить продукты определенного размера из БД

каждый продукт имеет столбец размеров: который содержит (например): «XS, M, L»

Я запускаю это утверждение

return DB::table('products')->where([['sizes', 'LIKE', "%".$size."%"]])->paginate(1);

например, если $ size = "L", он выбирает любой продукт с "L", "XL" или "XXL" - и это нормально для моего утверждения

Я сейчас спрашиваю о способе получения только определенного размера

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я рекомендую использовать значение хранилища в отдельных строках в другой таблице, чтобы его было проще запрашивать.

Хотя вы делаете это find_in_set с whereRaw

     DB::table('products')
     ->whereRaw("FIND_IN_SET('L',sizes)")
     ->paginate(1);
0 голосов
/ 26 апреля 2018

Если вы хотите получить точный размер, вы можете попробовать

return DB::table('products')->where(['sizes',  $size])->paginate(1);

используйте = вместо Like.

Для большего количества вариантов использования здесь приведены различные примеры.

WHERE sizes LIKE 'L%'   //Finds any values that starts with "L"
WHERE sizes LIKE '%L'   //Finds any values that ends with "L"
WHERE sizes LIKE '%or%' //Finds any values that have "or" in any position
WHERE sizes LIKE '_r%'  //Finds any values that have "r" in the second position
WHERE sizes LIKE 'a_%_%'    //Finds any values that starts with "a" and are at least 3 characters in length
WHERE sizes LIKE 'a%o'  //Finds any values that starts with "a" and ends with "o"

В вашем коде также есть опечатка

Изменить это

return DB::table('products')->where([['sizes', 'LIKE', "%".$size."%"]])->paginate(1);

К этому

return DB::table('products')->where('sizes', 'LIKE', "%".$size."%")->paginate(1);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...