Laravel 5 eloquent 其中
Laravel 5 eloquent whereIn
希望有人能帮助我,我需要在数据库中搜索类别 id = x 的项目
示例 table 项
身份证,猫,名字等...
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();
但是没用
感谢任何帮助找到最简单和最短的方法,问候
假设您正在使用 MySQL,您可以使用 FIND_IN_SET 函数。
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();
请注意,这不会使用在 cats 列上定义的任何索引。在字段中存储类似数据的数组通常是一个大危险信号。现在将其标准化,而不是尝试绕过当前设计,您会受益。
很难理解你想要实现的目标,但我会尝试。首先,正如@particus 提到的那样,最好的方法是在您不需要担心此类事情时创建数据透视表 table。
但是,如果您在以逗号分隔的列中有 ID 列表,则解决方案不会像
那样存储值
1,2,3
但总是在开头和结尾加上,
,所以应该是这样的:
,1,2,3,
这样,如果您的 table ,19,2,3,
中有并且您想要搜索值 9
,您应该使用查找 ,9,
字符串,例如:
$id = 9;
$items = Items::where('column', LIKE '%,'.$id.',%')->get();
现在对于上面的字符串将找不到任何记录,但是如果您有 ,9,2,3,
或只有 ,9,
,将会找到所需的记录。
希望有人能帮助我,我需要在数据库中搜索类别 id = x 的项目
示例 table 项 身份证,猫,名字等... 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();
但是没用
感谢任何帮助找到最简单和最短的方法,问候
假设您正在使用 MySQL,您可以使用 FIND_IN_SET 函数。
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();
请注意,这不会使用在 cats 列上定义的任何索引。在字段中存储类似数据的数组通常是一个大危险信号。现在将其标准化,而不是尝试绕过当前设计,您会受益。
很难理解你想要实现的目标,但我会尝试。首先,正如@particus 提到的那样,最好的方法是在您不需要担心此类事情时创建数据透视表 table。
但是,如果您在以逗号分隔的列中有 ID 列表,则解决方案不会像
那样存储值1,2,3
但总是在开头和结尾加上,
,所以应该是这样的:
,1,2,3,
这样,如果您的 table ,19,2,3,
中有并且您想要搜索值 9
,您应该使用查找 ,9,
字符串,例如:
$id = 9;
$items = Items::where('column', LIKE '%,'.$id.',%')->get();
现在对于上面的字符串将找不到任何记录,但是如果您有 ,9,2,3,
或只有 ,9,
,将会找到所需的记录。