2015-11-19 1 views
2

Я разрабатывал приложение в CakePHP 2.6, где сотрудник изначально принадлежал только одному отделу, однако системные требования теперь изменены, и существует связь HasAndBelongsToMany (HABTM) между персоналом и отделом.Как выполнить поиск по массиву в AuthComponent :: user()?

В настоящее время это является проблемой, когда я показываю информацию только тем сотрудникам, которые принадлежат к определенному отделу в представлении, так как мой объект AuthComponent :: user() теперь содержит массив департаментов.

Есть ли простой способ перебрать массив AuthComponent :: user() и проверить, совпадает ли значение с выбранным значением?

Старый Посмотреть код до того HABTM отношений:

if (AuthComponent::user('admin') == 1 || (AuthComponent::user('department_id') == $department['Department']['id'])) { 
    // Some code here 
}; 

AuthComponent :: Пользователь() массив:

array(16) { 
    ["id"]=> 
    string(1) "6" 
    ["salutation"]=> 
    string(2) "Mr" 
    ["firstname"]=> 
    string(6) "Joe" 
    ["lastname"]=> 
    string(4) "Bloggs" 
    ["email"]=> 
    string(21) "[email protected]" 
    ["role"]=> 
    string(23) "Teacher" 
    ["admin"]=> 
    bool(true) 
    ["dos"]=> 
    bool(false) 
    ["school_id"]=> 
    string(1) "1" 
    ["active"]=> 
    bool(true) 
    ["School"]=> 
    array(2) { 
    ["id"]=> 
    string(1) "1" 
    ["name"]=> 
    string(10) "School Name" 
    } 
    ["Department"]=> 
    array(3) { 
    [0]=> 
    array(2) { 
     ["id"]=> 
     string(1) "4" 
     ["name"]=> 
     string(20) "Careers & University" 
    } 
    [1]=> 
    array(2) { 
     ["id"]=> 
     string(2) "14" 
     ["name"]=> 
     string(9) "Geography" 
    } 
    [2]=> 
    array(2) { 
     ["id"]=> 
     string(2) "16" 
     ["name"]=> 
     string(3) "ICT" 
    } 
    } 
} 
+2

вы можете использовать 'Hash :: extract' для извлечения идентификаторов отдела, а затем использовать in_array для проверки того, находится ли ваш' department_id' в массиве – arilia

ответ

2

Возможно, самый простой подход заключается в использовании CakePHP's Hash::extract() метод для создания простой массив из всех отделов, принадлежащих пользователю, а затем проверка, если существует отдел в этом массиве, как это: -

$user = AuthComponent::user(); 
$departments = Hash::extract($user, 'Department.{n}.id'); 
if (
    (int)$user['admin'] === 1 
    || in_array($department['Department']['id'], $departments) === true 
) { 
    // Some code here 
} 

Хэш ИМП lity в CakePHP стоит посмотреть, поскольку он предоставляет некоторые очень удобные методы манипуляции массивами, которые позволяют работать с массивами, возвращаемыми запросами find().

0

Есть много различных способов, вы можете сделать это. Можно просто написать функцию, которая закругляется сквозной и довольно прост в реализации:

function doesBelongToDepartment($deptList, $userDeptId) 
{ 
    foreach($deptList as $dept) { 
    if($dept['id'] == $userDeptId) return true; 
    } 
    return false; 
} 

И тогда вы могли бы использовать его как следующее:

if (AuthComponent::user('admin') == 1 || doesBelongToDepartment($department['Department'], AuthComponent::user('department_id'))) { 
Смежные вопросы