Laravel 4.2 Eloquent принадлежит к трем многим таблицам с одним отображением возможных ограничений

У меня есть небольшая проблема с Eloquent в Laravel 4.2 … прежде всего извините за наименование таблиц.

Есть три таблицы:

  • Пользователи -Id -Identification -Name -Username …
  • SecurityAreas -Id -Идентификация -Описание …
  • SecurityAccessRights -Id -Идентификация …
    Содержит только два набора данных «чтение» и «запись»

эти таблицы имеют таблицу сопоставления:

  • Сопоставление безопасности -Id -SecurityAccessAreasId -SecurityAccessRightsId -UsersId

Сейчас я пытаюсь отобразить всех пользователей с определенной «областью» и принадлежащими «AccessRights». Поэтому я указал свои модели следующим образом:

User.php

class User extends Eloquent implements UserInterace, RemindableInterface {
use UserTrait, RemindableTrait;protected $table = 'Users';
protected $primaryKey = 'Id';
public $timestamps = false;

protected $hidden = array('password', 'remember_token');

public function securityAreas() {
return $this->belongsToMany('SecurityAreas', 'SecurityMappings', 'UsersId', 'SecurityAreasId' );
}

public function securityAccessRights() {
return $this->belongsToMany('SecurityAccessRights', 'SecurityMappings', 'UsersId', 'SecurityAccessRightsId' , 'SecurityAreasId' );
}
}

И в моем UserController.php я пытаюсь получить пользователя.

$oUsers = User::with('securityAreas')->with('securityAccessRights')->get();

Теперь Eloquent загружает всю информацию о Userobject … в моем представлении я хочу отобразить имя пользователя области и принадлежащие права.
Из-за принадлежности между «Областями» и «AccessRights» я получаю одну и ту же Зону два раза … но я хочу, чтобы она отображалась только один раз для каждого пользователя с группированными правами.
Например:
Визуальный пример

Итак, мой вопрос: как я могу выбрать «пользователя» с принадлежащими ему уникальными областями с принадлежностью «AccessRights»? Есть ли какая-либо функция или возможность отсортировать результат на контроллере? Или что-то не так с моей моделью пользователя, и я могу ограничить ее любым возможным способом?

Я немного смущен …

Любая помощь очень ценится.

0

Решение

Я использовал многомерный массив

UserController.php

$oUsers = User::with('securityAreas')->with('securityAccessRights')->get();
foreach($oUsers as $oUser) {
$arrUser = array();

$arrUser['id'] = $oUser->Id;
$arrUser['Name'] = $oUser->Name;
$arrUser['EMail'] = $oUser->EMail;
$arrUser['ADUser'] = $oUser->Username;
$arrUser['UserIdent'] = $oUser->Identification;
$arrUser['SecurityAreas'] = array();

$iCount = 0;

foreach($oUser->securityAreas as $oArea) {
if(!array_key_exists($oArea->Identification, $arrUser['SecurityAreas'])) {
$arrUser['SecurityAreas'][$oArea->Identification] = array();
}
$arrUser['SecurityAreas'][$oArea->Identification][] = $oUser->securityAccessRights[$iCount]->Identification;

$iCount++;
}

$arrReturn[] = $arrUser;
}

Пример вывода

Array ( [0] => Array (
[Name] => User, My
[EMail] =>
[Username] => MyUser
[UserIdent] => 000000
[SecurityAreas] => Array (
[Area1] => Array (
[0] => read
[1] => write )
[Area2] => Array (
[0] => read )
)
)
)

При этом я могу использовать различные циклы foreach в моем представлении для вывода значений в их правой области для каждого пользователя — области — справа.

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

Я надеюсь, что это поможет вам тоже.

В любом случае, если кто-то знает лучше или по-другому, я был бы признателен за это.

0

Другие решения

Других решений пока нет …