Laravel 4.2 Eloquent belongsToMany 三表一映射表可能的限制

Laravel 4.2 Eloquent belongsToMany three tables with one mappingtable possible resctrictions

我对 Laravel 4.2 中的 Eloquent 有点小问题...首先对 table 的命名感到抱歉。

有3个table:

这些 table 有一个映射 table:

现在我试图显示所有具有特定 "Area" 和属于 "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 加载有关用户对象的所有信息...在我的视图中,我想显示用户名、区域和所属权限。 因为 "Areas" 和 "AccessRights" 之间的归属,我两次获得相同的区域...但我只想为每个具有捆绑权限的用户显示一次。 例如: Visual Example

所以我的问题是我怎样才能select 与他所属的"User" 独特的区域与所属的"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 循环来为每个用户 - 区域 - 右输出正确范围内的值。

我认为我的模型中的关系不正确,有更好的方法来获得这些结果。

希望对你也有帮助。

无论如何,如果有人知道更好的方法或其他方法,我将不胜感激。