Как-то так должно работать.
$permissions = Product_permission::groupBy("societe_id")->paginate(15);
foreach($permission as $permission){
$auxArr = explode(",", $permission->access);
$auxCount = 0;
foreach($auxArr as $access_col_value)
if($access_col_value == 'web'){
$auxCount += 1;
}else if($access_col_value == 'form'){
$auxCount += 2;
}else if($access_col_value == 'api'){
$auxCount += 3;
}
$permission->acces_col_sum = $auxCount;
}
Если вы хотите использовать eloquent ... вам нужно добавить selectRaw с CASE внутри и добавить каждую возможную перестановку и ее значение, например:
CASE WHEN access = 'web,form,api' OR access = 'api,form,web'....
Если вы не уверены, что это всегда один и тот же порядок, я бы его не рекомендовал ...