我有三个不同的桌子:
Team_Action有一个带省略项的FK (action_id),我需要该表的名称值。Team_Action还有一个包含用户的FK (user_id),我需要用户表的名称值。
当时,我只能访问ID,而不能访问姓名。
我想知道是否有任何方法可以通过只使用Laravel的模型来实现以下目标:
@foreach($team->teamAction as $tmdata)
<tr>
<td>
$team->teamMember->name
</td>
<td>
$team->teamAction->name
</td>
</tr>
@endforeach我的团队模型:
//Infinite users belong to a team
public function teamMembers() {
return $this->hasMany(TeamsMembers::class,'team_id','id');
}
//Infinite actions per team
public function teamAction(){
return $this->hasMany(TeamsAction::class);
}TeamAction
public function team(){
return $this->belongsTo(Team::class);
}权限
public function teamAction(){
return $this->belongsTo(TeamsAction::class,'action_id');}TeamsMembers
public function team() {
return $this->belongsTo(Team::class,'team_id','id');
}
public function teamMember(){
return $this->hasMany(User::class,'id','user_id');
}我的控制器代码:
$teamID = $request->route('id');
$team = Team::where('id',$teamID)->get()->first();
foreach ($team->teamAction as $tta) {
$allTeamActions = Permission::where('id', $tta->action_id)->get();
}
foreach ($team->teamMembers as $ttm){
$allTeamMembers = User::where('id', $ttm->user_id)->get();
}我的目标是这样的
$allTeamActions = Permission::where('id', $team->teamAction[0]->action_id->name)->get();编辑:让我设置一些视觉效果,以使它更清楚:

是否有一种方法可以通过雄辩的模型检索我所使用的模型的名称值,即这些模型的FK值?1
场景如下:每个成员都属于一个团队。(表team : ID,creator_id)团队在另一个名为team_members (user_id,team_id)的表中有多个成员。一个团队将多个操作存储在另一个名为team_actions的表中,该表存储来自另一个名为权限的表(team_id,action_id_user_id)的FK值。一个用户表存储用户的所有实际信息(也就是我想使用的他们的名字)。
我想要创建一个包含所有这些信息的视图表。也就是说,我正在尝试通过团队模型访问以下信息:Team user (他们的名字来自user表,用户的ID存储在team_members和team_actions中)
团队用户操作(来自权限表的操作名称,该操作的ID存储在team_actions中)
发布于 2021-02-16 11:34:13
根据所提供的描述,team_actions表看起来像一个枢轴或连接表,它在team <->用户和team <->权限之间形成了许多到多个关系。基于这个结论,您可以定义一个hasMany()关系到team_actions表,这将是一个TeamMemberAction模型。
class TeamMemberAction extends Model
{
protected $table = 'team_actions';
public function member()
{
return $this->belongsTo(User::class, 'id', 'user_id');
}
public function team()
{
return $this->belongsTo(Team::class, 'id', 'team_id');
}
public function action()
{
return $this->belongsTo(Permission::class, 'id', 'action_id');
}
}
class Team extends Model
{
public function member_actions()
{
return $this->hasMany(TeamMemberAction::class, 'id', 'team_id');
}
}因此,我想不需要仅仅为了获得团队成员列表就需要额外的team_members表。
现在,通过这个新的映射,您可以获得成员和操作
$team = Team:with(['member_actions.member','member_actions.action'])->find(1);对于成员名称,您需要循环$team->member_action集合,并且每个集合都有一个成员键,其中包含来自用户表的成员详细信息。
{
id:1
name:"Team One"
member_actions: [{
id: 3,
member: {
id: 7
name: "User name"
},
action: {
id: 11,
name: "Action name"
}
},{
id: 5
member: {
id: 9,
name: "User name"
},
action: {
id: 13,
name: "Action name"
}
}]
}如果您直接想要团队成员,那么定义属于您的团队模型中的许多关系,如
class Team extends Model
{
public function members()
{
return $this->belongsToMany(User::class, 'team_actions', 'team_id', 'user_id');
}
public function actions()
{
return $this->belongsToMany(Permission::class, 'team_actions', 'team_id', 'action_id');
}
}然后,您可以将这两个关系加载为
$team = Team:with(['members','actions'])->find(1);{
id:1
name:"Team One"
members: [{
id: 3,
name: "User name"
},{
id: 5,
name: "User name"
}],
actions: [{
id: 7,
name: "Action name"
},{
id: 9,
name: "Action name"
}]
}https://stackoverflow.com/questions/66209914
复制相似问题