这让我很难过。我尝试使用按位运算符$ages=Ages::all();
基于productmask字段过滤&
(代码应该是不言自明的)
我已经尝试了
@foreach($ages->where('productmask', '&', 2) as $option)
和
@foreach($ages->filter(function($i){return ((int)($i->productmask & 2)); }) as $option)
和
@foreach($ages->filter(function($i){return ((int)($i->productmask & 2) == 2); })->values() as $option)
并且当productmask = 3时无效,但在productmask正好为2时才能正常工作。
这里有什么选择(没有双关语意)?为什么这不起作用?
我很确定如果我做了\DB::whereRaw
它会起作用(因为我可以针对Db运行它并且它可以工作,我得到2和3个条目):
SELECT * from ages WHERE productmask&2
但是这里它绕过流畅并且在视图中击中了数据库?不好的形式。
任何使用位掩码的人都会碰到这个?
提前感谢。
答案 0 :(得分:1)
嗯,我不知道为什么我必须这么做,但这就是我为了让它发挥作用所做的事情:
@foreach($locations->filter(function($i){if (decbin($i->productmask) & 16) return $i; }) as $option)
基本上,我必须在集合的字段值(decbin()
)上使用$ages->productmask
,以便比较可以正确解析。
立即行动!希望这有助于某人。
答案 1 :(得分:0)
从source这里暗示
where()接受3个参数,列名,运算符和值 被比较。
运营商可以是以下之一:' =','<','>','< =','> =', '<>','!=','喜欢','不喜欢','介于' ;,' ilike'
但是我找到了一些你可能需要看的东西here。 这有助于您解决问题。
如需进一步挖掘see PHP documentation,请阅读此SO post
就你的问题而言
像这样使用您的查询
$ages->whereRaw('(productmask & 2)')