首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5雄辩whereIn

Laravel 5雄辩whereIn
EN

Stack Overflow用户
提问于 2015-03-19 17:15:07
回答 2查看 2.7K关注 0票数 0

希望有人能帮我,我需要搜索数据库中有id =x类的项目。

例如表项id,猫,名字等等.猫= '1,19‘或可能只是'19’或'1,9‘

所以在这个例子中,我需要一个搜索带有9的猫的条目。

我试过了,但是当我搜索9的时候,它也显示了19

代码语言:javascript
复制
$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();

我也尝试过

代码语言:javascript
复制
$items = Items::whereIn(explode(',', 'cats'), $cat->id)->get(); 

但这不管用

感谢任何帮助找出最简单和简短的方式来做这件事,问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 22:24:49

很难理解你想要实现什么,但我会努力的。首先,正如@ pivot所提到的,最好的方法是在不需要担心这种事情的情况下创建枢轴表。

但是,如果在由coma分隔的列中有if列表,则解决方案不是存储以下值

代码语言:javascript
复制
1,2,3

但是总是在开头和结尾添加,,所以在本例中应该是这样的:

代码语言:javascript
复制
,1,2,3,

这样,如果表中有,19,2,3,,并且要搜索值9,则应该使用查找,9,字符串,例如:

代码语言:javascript
复制
$id = 9; 
$items = Items::where('column', LIKE '%,'.$id.',%')->get();

现在,对于上面的字符串,将找不到任何记录,但是如果您有,9,2,3,,9,,则会找到所需的记录。

票数 1
EN

Stack Overflow用户

发布于 2015-03-19 18:09:50

假设您使用的是MySQL,则可以使用FIND_IN_SET函数。

代码语言:javascript
复制
$items = Items::whereRaw("FIND_IN_SET(".$cat->id.", cats)")->orderBy('updated_at', 'DESC')->get();

请注意,这将不会使用在cats列上定义的任何索引。将数组像数据一样存储在字段中通常是一个很大的危险标志。现在将其规范化将使您受益,而不是试图绕过当前的设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29150945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档