使用雄辩有问题。我有一个user
表(id
,name
,email
,roleid
)和另外2个表(student
和teacher
)。
我想通过user
(用户表)和roleid
(user_id
和student
表)将其连接到teacher
表,但是我似乎无法在2个表(学生和教师)有数据时显示/查看。
例如student
表有一条记录,而teacher
没有表
这是我的用户模型
//User Model
public function student(){
return $this->hasOne('App\Student','user_id');
}
public function teacher(){
return $this->hasOne('App\Teacher','user_id');
}
//Student and Teacher Model
public function user(){
return $this->belongsTo('App\User','id');
}
//Teacher Controller
public function teacher(){
$teachers = Teacher::orderBy('t_fname','asc')->paginate(10);
$users = User::orderBy('username','asc')->paginate(10);
//$teachers = Teacher::orderBy('name','asc')->paginate(10);
return view('usersaccount.teacher', compact('teachers','users'));
}
//View Teacher
@if (count($teachers)>0)
@foreach($users as $user)
<tr>
<td>{{$user->username}}</td>
<td>{{$user->teacher->t_fname}}</td>
<td>{{$user->email}}</td>
<td>
@if(!Auth::guest())
@if(Auth::user()->id == $user->teacher->created_by)
{!!Form::open(['action'=>['TeacherController@destroy', $user->id], 'method'=>'Post', 'class'=>''])!!}
{{Form::hidden('title',$user->username)}}
{{Form::hidden('desc',$user->email)}}
{{Form::hidden('_method','DELETE')}}
{{Form::button('<i class="fa fa-trash"></i>', ['type' => 'submit', 'class' => 'btn btn-warning btn-sm delete'] ) }}
{{-- {{Form::submit('Delete',['class'=>'btn btn-danger delete'])}} --}}
<a href="/teacher/{{$user->id}}/edit" class="btn btn-primary btn-sm mr-1" data-target=".edit{{$user->id}}" data-toggle="modal"><i class="fas fa-pencil-alt"></i> </a>
{!!Form::close()!!}
@endif
@endif
</td>
<td>{{$user->email}}</td>
</tr>
@endforeach
@endif
答案 0 :(得分:1)
如果学生表和教师表中都有数据,则代码不起作用的原因是因为两者都使用了用户数据user_id
的相同字段。
根据您的情况设置数据库和模型的正确方法是使用一对一多态关系:https://laravel.com/docs/5.8/eloquent-relationships#polymorphic-relationships
user_id
列和关系。$table->unsignedInteger('userable_id');
$table->string('userable_type');
学生和教师模型:
public function user() {
return $this->morphOne('App\User', 'userable');
}
用户模型:
public function userable() {
return $this->morphTo();
}
现在致电$user->userable
将返回老师或学生。