实际上,我试图了解如何将表users
和teams
联接到members
吗?
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('App\Team', 'user_id', 'id'); ?
}
public function member(){
return $this->hasOne('App\Member', 'user_id', 'id'); ?
}
protected $fillable = [
'user_id', 'name'
];
public function member(){
return $this->hasMany('App\Member', 'team_id'); ?
}
public function user(){
return $this->belongsTo('App\User', 'id', 'user_id'); ?
}
protected $fillable = [
'id', 'user_id', 'team_id'
];
public function team(){
return $this->belongsTo('App\Team', 'team_id');
}
public function user(){
return $this->belongsTo('App\User', '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'));
}
答案 0 :(得分:1)
如果您希望用户可以属于一个团队,那么就不需要中间表。只需在用户表中添加一列,例如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('App\Team', 'team_id');
}
Team
模型
protected $fillable = [
'name'
];
public function users()
{
return $this->hasMany('App\User', 'team_id');
}
在上述关系中,一个用户属于一个团队,一个团队有许多用户。我很确定您正在努力实现这一目标。随时询问您是否发现难以理解的内容。
看起来您不需要中间模型
Member
。如果要建立多对多关系,则需要使用中间表。
答案 1 :(得分:1)
您要实现的目标还不够明确。如果我猜到了,您想找出哪个user
位于哪个team
中,那么在这种情况下,您可以进行-
User.php 模型-
protected $fillable = [
'name', 'email', 'password',
];
public function member(){
return $this->belongsTo('App\Member', 'user_id', 'id');
}
Member.php 模型-
protected $fillable = [
'id', 'user_id', 'team_id'
];
public function team(){
return $this->belongsTo('App\Team', 'team_id');
}
public function user(){
return $this->belongsTo('App\User', 'user_id', 'id');
}
Team.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