[英]Laravel 5 eloquent whereIn
希望任何人都可以帮助我,我需要在数据库中搜索类别 id = x 的项目
示例表项 id、cats、name 等...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();
但它不起作用
感谢任何帮助找到最简单和简短的方法,问候
很难理解您想要实现的目标,但我会尝试。 首先,正如@particus 提到的,最好的方法是在您不需要担心这些事情时创建数据透视表。
但是,如果您在以昏迷分隔的列中有 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,
则会找到所需的记录。
假设您使用的是 MySQL,您可以使用 FIND_IN_SET 函数。
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();
请注意,这不会使用在cats 列上定义的任何索引。 在字段中存储类似数据的数组通常是一个很大的危险信号。 现在将其标准化,而不是试图解决当前的设计,您会从中受益。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.