У меня есть небольшая проблема с Eloquent в Laravel 4.2 … прежде всего извините за наименование таблиц.
Есть три таблицы:
эти таблицы имеют таблицу сопоставления:
Сейчас я пытаюсь отобразить всех пользователей с определенной «областью» и принадлежащими «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»? Есть ли какая-либо функция или возможность отсортировать результат на контроллере? Или что-то не так с моей моделью пользователя, и я могу ограничить ее любым возможным способом?
Я немного смущен …
Любая помощь очень ценится.
Я использовал многомерный массив
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 в моем представлении для вывода значений в их правой области для каждого пользователя — области — справа.
Я думал, что мои отношения в моих моделях не верны, и есть лучший способ получить эти результаты.
Я надеюсь, что это поможет вам тоже.
В любом случае, если кто-то знает лучше или по-другому, я был бы признателен за это.
Других решений пока нет …