2017-09-25 109 views
0

这让我难住。我想使用位运算符& (代码应该是不言自明)laravel 5.4按位操作不按预期方式工作(雄辩)

我已经试过

@foreach($ages->where('productmask', '&', 2) as $option)  

@foreach($ages->filter(function($i){return ((int)($i->productmask & 2)); }) as $option) 

根据productmask场过滤 $ages=Ages::all();
@foreach($ages->filter(function($i){return ((int)($i->productmask & 2) == 2); })->values() as $option) 

and none wo rk当productmask = 3时,但在productmask恰好为2时工作。

这里有什么我的选择(没有双关语意)?为什么这不起作用?

我敢肯定,如果我这样做,将工作\DB::whereRaw(因为我可以对数据库运行这个和它的作品,我得到第2个第3项):

SELECT * from ages WHERE productmask&2

但在这里它绕过流利并在视图内敲击数据库?不好的形式。

任何使用位掩码的人都会遇到过这种情况吗?

在此先感谢。

回答

0

source这里表明

其中()采用3个参数,列,操作者和价值 的名称来对比较。

运算符可以是下列之一: '!=' '=', '<', '>', '< =', '> =', '<>', '象', '不喜欢','之间','ilike'

但是,我发现了一些你可能需要看看here。 这将帮助你解决你的问题。

为了进一步挖掘see PHP documentation也看过这个SO post

,并尽可能你的问题而言

使用这样的查询

$ages->whereRaw('(productmask & 2)') 
+0

是的,我看了看,但我宁愿不必添加一个新的包和实施新的字段类型只是为了缓解似乎是一个简单的数学问题与雄辩。或者至少用他们的方式,我正在尝试使用它。 从供应商/ laravel /框架/ SRC /照亮/数据库/查询/ Builder.php 保护$运营= [ '=', '<', '>', '<=', '> =', '<>', '!=' , 'like','like binary','not like','between','ilike', '&','|','^','<<', '>>', 'rlike','regexp' ,'not regexp', '〜','〜*','!〜','!〜*','与'相似', '与''不相似', ]; – harrisoftware

+0

请检查更新的答案 –

+0

我试过whereRaw。该方法似乎只在类('年龄:whereRaw()')上可用。当我尝试在'$ ages = Ages :: all();'的结果上使用它时,我找到了一个找不到的方法。 '$ ages-> whereRaw()'失败。 – harrisoftware

1

好了,我不知道为什么我有要做到这一点,但这是我做了什么来得到它的工作:

@foreach($locations->filter(function($i){if (decbin($i->productmask) & 16) return $i; }) as $option)  

基本上,我必须在集合的字段值($ages->productmask)上使用decbin(),以便比较可以正确解析。

现在工作!希望这可以帮助某人。

+0

很高兴你解决这个:) –

+0

一旦你有资格接受答案请你接受答案来关闭你的问题 –