laravel 5.4按位运算无法按预期工作(Eloquent)

时间:2017-09-25 05:15:54

标签: laravel bitwise-operators fluent laravel-eloquent bitmask

这让我很难过。我尝试使用按位运算符$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

但是这里它绕过流畅并且在视图中击中了数据库?不好的形式。

任何使用位掩码的人都会碰到这个?

提前感谢。

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)')