希望有人可以帮助我,我需要在数据库中搜索类别为id = x的项目
示例表项 id,猫,名字等...... 猫=' 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();
但它不起作用
感谢任何帮助,以找到最简单和最短暂的方式来做到这一点,问候
答案 0 :(得分:1)
很难理解你想要达到的目标,但我会尝试。首先,@ subicus提到最好的方法是在不需要担心这些事情时创建数据透视表。
但是,如果在由逗号分隔的列中包含id列表,则解决方案不会存储
之类的值1,2,3
但始终在开头和结尾添加,
,所以应该是这种情况:
,1,2,3,
这样,如果您在表,19,2,3,
中并且想要搜索值9
,则应该使用查找,9,
字符串,例如:
$id = 9;
$items = Items::where('column', LIKE '%,'.$id.',%')->get();
现在对于上面的字符串,不会找到任何记录,但如果您有,9,2,3,
或只有,9,
,则会找到所需的记录。
答案 1 :(得分:0)
假设您正在使用MySQL,您可以使用FIND_IN_SET函数。
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();
请注意,这不会使用cats列上定义的任何索引。在一个字段中存储像数据一样的数组通常是一个很大的危险信号。你现在可以通过规范化来获益,而不是试图解决当前的设计问题。