Laravel 5 красноречивый, гдеIn

Надеюсь, кто-нибудь может мне помочь, мне нужно найти элементы, которые имеют категорию id = x в базе данных

Примеры элементов таблицы id, кошек, имя и т. Д. … cats = '1,19' или, может быть, просто «19» или, может быть, «1,9»,

Поэтому для этого примера мне нужно искать предметы, у которых есть кошки с 9

Я пробовал это, но когда я ищу 9, он также показывает 19

$items = Items::where(function($query)use($cat) { $query->where('cats', 'like', '%,'.$cat->id.'%'); $query->orWhere('cats', 'like', '%'.$cat->id.',%'); $query->orWhere('cats', 'like', '%'.$cat->id.'%'); })->orderBy('updated_at', 'DSC')->get(); 

Я тоже что-то пробовал

 $items = Items::whereIn(explode(',', 'cats'), $cat->id)->get(); 

но он не работает

Цените любую помощь, чтобы найти самый простой и короткий способ сделать это, считает

Related of "Laravel 5 красноречивый, гдеIn"

Трудно понять, чего вы хотите достичь, но я попробую. Прежде всего, как упоминал @particus, лучший способ – создать сводную таблицу, когда вам не нужно беспокоиться о таких вещах.

Но решение, если у вас есть список идентификаторов в столбцах, разделенных комой, не хранит такие значения, как

 1,2,3 

но всегда добавляя в начале и в конце, так что это должно быть в этом случае:

 ,1,2,3, 

Таким образом, если у вас в таблице ,19,2,3, и вы хотите найти значение 9 , вы должны использовать look for ,9, string, например:

 $id = 9; $items = Items::where('column', LIKE '%,'.$id.',%')->get(); 

Теперь для ,9,2,3, строки запись не будет найдена, но если у вас есть ,9,2,3, или просто ,9, то будет найдена нужная запись.

Предполагая, что вы используете MySQL, вы можете использовать функцию FIND_IN_SET.

 $items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get(); 

Обратите внимание, что это не будет использовать индексы, определенные в столбце кошек. Хранение массива как данных в поле обычно является большим красным флагом. Вы бы выиграли от нормализации этого сейчас, вместо того, чтобы пытаться обойти текущий дизайн.