关系检索用户电子邮件



我试图了解如何将表users连接起来,实际上teamsmembers

用户表:

id |   name  |         email          |     password
1     alain        alain@gmail.com          *****
2     eric         eric1@gmail.com          *****

团队表:

id |     name          
1      R.O.S    
2      Stephanois   

成员表:

id |     user_id  (email)        |    team_id (name)
1          1                             1
2          2                             1

数据库:

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function up()
{
Schema::create('members', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users');
$table->integer('team_id')->unsigned()->nullable();
$table->foreign('team_id')->references('id')->on('teams');
$table->timestamps();
});
}
public function up()
{
Schema::create('teams', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}

用户型号:

protected $fillable = [
'name', 'email', 'password',
];
public function team(){
return $this->hasOne('AppTeam', 'user_id', 'id'); ?
}
public function member(){
return $this->hasOne('AppMember', 'user_id', 'id'); ?
}

团队模型:

protected $fillable = [
'user_id', 'name'
];
public function member(){
return $this->hasMany('AppMember', 'team_id'); ?
}
public function user(){
return $this->belongsTo('AppUser', 'id', 'user_id'); ?
}

会员型号:

protected $fillable = [
'id', 'user_id', 'team_id'
];
public function team(){
return $this->belongsTo('AppTeam', 'team_id');
}
public function user(){
return $this->belongsTo('AppUser', 'id', 'user_id'); ?
}

我提前感谢您的帮助

编辑:当我使用用户"alain@gmail.com"登录时,我不检索用户"alain@gmail.com"的信息,即user_id和team_id。

public function index(Request $request)
{   
$user = $request->user();
$members = Member::query()
->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
$query->where('id???', $user->email); ????
})
->when($request->has('search'), function (Builder $query) use ($request) {
$query->where('name??', 'like', '%' . $request->input('search') . '%');
})->with('team:id,name') 
->paginate(5);
return view('admin.members.index', compact('members'))
->with('display_search', $user->hasRole('admin'));
} 

你想实现哪一个还不够清楚。如果我猜,你想找出哪个user在哪个team,那么在这种情况下你可以通过 -

用户.php型号 -

protected $fillable = [
'name', 'email', 'password',
];
public function member(){
return $this->belongsTo('AppMember', 'user_id', 'id');
}

会员.php模特 -

protected $fillable = [
'id', 'user_id', 'team_id'
];
public function team(){
return $this->belongsTo('AppTeam', 'team_id');
}
public function user(){
return $this->belongsTo('AppUser', 'user_id', 'id');
}

团队.php模型(暂时保持原样(-

class Team extends Model
{
protected $fillable = [
'name'
];
}

最后,在您的控制器方法中称呼已经在团队中的成员-

$members = Member::with('team', 'user')->get();
return view('your-blade-file-name', compact('members'));

而且,在您的刀片文件中 -

@foreach($members as $member)
<p>Name: {{ $member->user->name }} , Email: {{ $member->user->email }} , Team - {{ $member->team->name }}</p>
@endforeach

输出:

Name: alain, Email: alain@gmail.com , Team - R.O.S
Name: eric, Email: eric1@gmail.com , Team - R.O.S

如果您希望用户可以属于单个团队,则不需要中间表。只需在用户表中添加一列,例如team_id,该列将保存用户所属团队的值。

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->unsignedInteger('team_id'); //make it nullable or anything based on your need
$table->rememberToken();
$table->timestamps();
});
Schema::create('teams', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});

现在在模型中建立关系:

User模型

protected $fillable = [
'name', 'email', 'password','team_id'
];
public function team()
{
return $this->belongsTo('AppTeam', 'team_id');
}

Team模型

protected $fillable = [
'name'
];
public function users()
{
return $this->hasMany('AppUser', 'team_id');
}

在上述关系中,用户属于单个团队,团队具有多个用户。我很确定你正在努力实现这一目标。如果您发现任何难以理解的内容,请随时询问。

看你不需要中间模型Member.如果你想要多对多的关系,那么你需要使用中间表。

最新更新