2017-08-23 6 views
0

Laravel 4.2のEloquentに少し問題があります。まずはテーブルの名前をつけて申し訳ありません。Laravel 4.2 Eloquent belongsToMany 3つのテーブルにマッピング可能な可能性があります

3つのテーブルがあります。

  • ユーザーが-Id -Identification -Name -Username ...
  • SecurityAreas -Id -Identification -Description ...
  • SecurityAccessRights -Id -Identification .. 。

    01: は、これらのテーブルは、マッピングテーブルを持っている

を「読み取り」と「書き込み」ちょうど2つのデータセットが含まれています

  • 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では、私はUserを取得しようとしています。

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

今雄弁負荷ユーザオブジェクト上のすべての情報...私の見解では、私は、ユーザー名に地域や所属する権利を表示したいです。 "Area"と "AccessRights"の間に所属するのは同じAreaを2回取得するためですが、集められた権限を持つ各ユーザーごとに1回だけ表示したいと考えています。 例: ​​私の質問は、「AccessRights」に属する所属する固有の領域で「ユーザー」を選択する方法です。コントローラーで結果をソートする機能や可能性はありますか?または私のUsermodelに間違ったことがありますか?可能な限り制限することはできますか?

私は少し混乱していますが...

どのような援助を感謝しています。

答えて

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ループを使用することができます - エリア - 右。

私のモデルの私の関係は正しくないと思って、これらの結果を得る良い方法があります。

こちらもお役に立てれば幸いです。

誰かがもっと良いことを知っていれば、私はそれを知っていただければ幸いです。

関連する問題