2017-09-25 150 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

一旦你有資格接受答案請你接受答案來關閉你的問題 –