Laravel 5 eloquent donde

Espero que alguien pueda ayudarme, necesito buscar elementos que tengan la categoría id = x en la base de datos

Ejemplo de los ítems de la tabla id, cats, name etc … cats = ‘1,19’ o tal vez solo ’19’ o tal vez ‘1,9’

Así que para este ejemplo necesito una para buscar elementos que tienen gatos con 9

Intenté esto pero cuando busco 9 también muestra 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(); 

También probé algo

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

pero no funciona

Agradecemos cualquier ayuda para encontrar la forma más fácil y breve de hacer esto, saludos

Es bastante difícil entender lo que quieres lograr, pero lo intentaré. En primer lugar, como mencionó @particus, la mejor manera es crear una tabla dinámica cuando no necesita preocuparse por esas cosas.

Pero la solución si tiene una lista de identificadores en columnas separadas por coma no es almacenar valores como

 1,2,3 

pero siempre agregando , al principio y al final, por lo que debería ser en este caso:

 ,1,2,3, 

De esta manera, si tiene en su tabla ,19,2,3, y desea buscar el valor 9 , debe usar buscar ,9, cadena, por ejemplo:

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

Ahora, para la cadena anterior no se encontrará ningún registro, pero si tiene ,9,2,3, o simplemente ,9, el registro deseado.

Suponiendo que está utilizando MySQL, puede usar la función FIND_IN_SET.

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

Tenga en cuenta que esto no utilizará ningún índice definido en la columna de gatos. El almacenamiento de datos de tipo array en un campo suele ser una gran bandera roja. Se beneficiaría si normalizara esto ahora, en lugar de intentar solucionar el diseño actual.