2015-12-22 5 views
0

В моей базе данных Я хранлю разрешение пользователей в двоичном формате. У меня 3 пользователя, администратор, менеджер, финансы. Тезисы представляют коротким «бинарного» строка,mysql LIKE condition in laravel eloquent

Admin - 100 
Manager - 010 
Finance - 001 

Теперь роли взаимозаменяемы, и пользователь может иметь более чем одну роль, например, пользователь может иметь права финансов и менеджера, представлены как это, «011» в основном 1 представляет на 0 означает off.

Моя проблема ищет данные в моих отношениях с Laravel, в настоящее время я делаю следующее, чтобы найти менеджера.

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

Теперь очевидно, что это работает только в том случае, если пользователь является менеджером, а не финансом. Я полагаю, что могу использовать mysql's 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');