2015-12-22 33 views
0

在我的數據庫中,我以「二進制」格式存儲用戶權限我有3個用戶permsissions,Admin,Manager,Finance。論文是由短暫的「二進制」的字符串表示,mysql在laravel雄辯中的LIKE條件

Admin - 100 
Manager - 010 
Finance - 001 

現在的角色是可以互換的,並且用戶可以例如用戶可以擁有財務和管理權限的多個角色,這樣表示,「011」基本上1代表0代表關閉。

我的問題是在我的Laravel關係中尋找數據,目前我正在執行以下操作,找到一位經理。

public function managers() { 
    return $this->belongsToMany('User')->wherePivot('role', '=', '010')->withPivot(['created_at' => 'created_at as joined', 'role' => 'role as role']); 
} 

現在顯然這隻適用於用戶是經理而不是財務人員。我想我可以使用mysql的LIKE來比較字符串的權限,但我可以找出部分匹配?

例如,我將如何檢查三的第二個是0還是1?簡單的規則就是,

第一數量= 1層,那麼人的許可, 第二個號碼= 1個,那麼經理批准, Thirder數= 1個,則金融許可

,但可以有任意數量的組合。

+0

是否有SUBST或CHARAT函數可以用於這個? – durbnpoisn

+1

'wherePivot('role','LIKE','_1 _')' –

+0

好像你可以通過創建一個權限表並且在用戶和權限之間有多對多的關係來避免這個問題。 –

回答

1

您可以使用substring來做到這一點。像這樣:

$this->belongsToMany('User') 
    ->wherePivot(DB::Raw('SUBSTRING(role, 2, 1)'), '=', '1');