Как создать условие с проверкой битовой маской в Laravel

Всем привет. Ситуация следующая, есть две таблицы, contract и contract_group

contract - имеет столбцы id,title,gr .... столбец gr содержит битовую маску.

contract_group - имеет столбцы id,title

столбец gr вычисляется по формуле 1<<gr1 | 1<<gr2...| 1<<grN, где gr1,gr2,grN это id из таблицы contract_group.

Каким образом можно объединить две таблицы и получить группы для контракта? с помощью with не получится.

На данный момент сделал так:

public static function groups(){
    $contracts = self::get();
    $groups = GroupsContract::get();

    foreach ($contracts as $key => $contract){
        foreach ($groups as $group){

            if(($contract->gr & (1<<$group->id)) > 0){
                $contracts[$key]->attributes['groups'][] = $group;
            }
        }
    }
}

Но тут возникает много неудобный моментов, таких как нельзя добавить условий через модель и т.п


Ответы (0 шт):