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,,将会找到所需的记录。