Laravel 4.2 Eloquent属于ToMany三个表,其中一个映射表可能存在重新限制

时间:2017-08-23 07:17:31

标签: php laravel eloquent mapping database-relations

我在Laravel 4.2中对Eloquent有一点问题...首先抱歉桌面命名。

有三个表格:

  • 用户-Id -Identification -Name -Username ...
  • SecurityAreas -Id -Identification -Description ...
  • SecurityAccessRights -Id -Identification ... 仅包含两个数据集" read"和"写"

这些表有一个映射表:

  • SecurityMapping -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的所有信息...在我的视图中我想显示用户名区域和所有权。 因为属于"区域"和#34; AccessRights"我两次得到相同的区域......但是我想为每个拥有成熟权利的用户显示一次。 例如: Visual Example

所以我的问题是如何选择"用户"与他所属的独特区域与属于" AccessRights"?是否有任何功能或可能在控制器上对结果进行排序?或者我的Usermodel有什么错误,我可以以任何可能的方式限制吗?

我有点困惑......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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循环来为每个用户输出正确范围内的值 - 区域 - 右。

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

我希望这对你也有帮助。

无论如何,如果有人知道更好或其他方式我会很高兴知道它。