Laravel 4.2 Eloquent belongsToMany 三表一映射表可能的限制
Laravel 4.2 Eloquent belongsToMany three tables with one mappingtable possible resctrictions
我对 Laravel 4.2 中的 Eloquent 有点小问题...首先对 table 的命名感到抱歉。
有3个table:
- 用户 -Id -Identification -Name -用户名 ...
- SecurityAreas -Id -Identification -Description...
- SecurityAccessRights -Id -Identification ...
仅包含两个数据集 "read" 和 "write"
这些 table 有一个映射 table:
- SecurityMapping -Id -SecurityAccessAreasId -SecurityAccessRightsId -UsersId
现在我试图显示所有具有特定 "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 循环来为每个用户 - 区域 - 右输出正确范围内的值。
我认为我的模型中的关系不正确,有更好的方法来获得这些结果。
希望对你也有帮助。
无论如何,如果有人知道更好的方法或其他方法,我将不胜感激。
我对 Laravel 4.2 中的 Eloquent 有点小问题...首先对 table 的命名感到抱歉。
有3个table:
- 用户 -Id -Identification -Name -用户名 ...
- SecurityAreas -Id -Identification -Description...
- SecurityAccessRights -Id -Identification ... 仅包含两个数据集 "read" 和 "write"
这些 table 有一个映射 table:
- SecurityMapping -Id -SecurityAccessAreasId -SecurityAccessRightsId -UsersId
现在我试图显示所有具有特定 "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 循环来为每个用户 - 区域 - 右输出正确范围内的值。
我认为我的模型中的关系不正确,有更好的方法来获得这些结果。
希望对你也有帮助。
无论如何,如果有人知道更好的方法或其他方法,我将不胜感激。