希望有人能帮我,我需要搜索数据库中有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(); 但这不管用
感谢任何帮助找出最简单和简短的方式来做这件事,问候
发布于 2015-03-19 22:24:49
很难理解你想要实现什么,但我会努力的。首先,正如@ pivot所提到的,最好的方法是在不需要担心这种事情的情况下创建枢轴表。
但是,如果在由coma分隔的列中有if列表,则解决方案不是存储以下值
1,2,3但是总是在开头和结尾添加,,所以在本例中应该是这样的:
,1,2,3,这样,如果表中有,19,2,3,,并且要搜索值9,则应该使用查找,9,字符串,例如:
$id = 9;
$items = Items::where('column', LIKE '%,'.$id.',%')->get();现在,对于上面的字符串,将找不到任何记录,但是如果您有,9,2,3,或,9,,则会找到所需的记录。
发布于 2015-03-19 18:09:50
假设您使用的是MySQL,则可以使用FIND_IN_SET函数。
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();请注意,这将不会使用在cats列上定义的任何索引。将数组像数据一样存储在字段中通常是一个很大的危险标志。现在将其规范化将使您受益,而不是试图绕过当前的设计。
https://stackoverflow.com/questions/29150945
复制相似问题