【发布时间】:2021-01-30 09:00:57
【问题描述】:
我正在制作一个在线学校平台,其中一部分学生可以看到它的课程及其信息..但相关函数返回此错误:未定义偏移量:0(查看:C:\xampp\htdocs\OnlineSchool\资源\views\admin\student\ClassReport.blade.php)
模型之间存在一些关系 我的模特:
USER(学生和教师)Ô LEVEL(班级级别)Ô教室。
=> 学生和教室之间存在多对多关系(数据透视表)
请把我从这个愚蠢的错误中拯救出来 用户:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','image','level','code_meli',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function classroom(){
return $this->hasMany (classroom::class);
}
public function ClassRoomStudent(){
return $this->belongsToMany (classroom::class ,'classroom_user','user_id','classroom_id');
}
}
教室:
class classroom extends Model
{
protected $fillable = [
'title', 'teacher_id', 'level_id','day','time','price',
];
public function Student(){
return $this->belongsToMany (user::class ,'classroom_user','classroom_id','user_id');
}
public function level(){
return $this->belongsTo (level::class );
}
public function teacher(){
return $this->belongsTo (user::class );
}
}
等级:
class level extends Model
{
protected $fillable = [
'title',
];
public function classroom(){
return $this->hasMany (classroom::class);
}
public function exam(){
return $this->hasMany (exam::class);
}
}
以及我在控制器中的功能:
public function MyClasses(){
$student_id=auth ()->user ()->id;
$classrooms=classroom::with ('level','teacher','factor')->wherehas('student',function ($q) use($student_id){
$q->where('id',$student_id);
})->get();
return view ('admin.student.ClassReport',compact ('classrooms','student_id'));
}
最后..我的刀片:
@foreach($classrooms as $class)
<tr>
<td>{{$i++}}</td>
<td>{{$class->title}}</td>
<td>{{$class->teacher[0]->name}}</td>
.
.
.
.
</tr>
@endforeach
【问题讨论】:
-
为什么是
$class->teacher[0]->name而不是$class->teacher->name? -
public function teacher()返回单个User实例,或null;它不是一个数组/集合,所以你不能使用[0](数组索引),你也不需要。$class->teacher->name ?? 'None'将输出教师的姓名,如果班级没有教师姓名,则为None。 -
另外,请修正你的编码标准;不要添加不必要的空格,如
auth ()->user ()->id,应为auth()->user()->id,型号名称为StudlyCase、User、Level、Classroom等,并保持一致;public function classroom()和public function ClassRoomStudent()使用截然不同的情况...应该是public function classroom()和public function classroomStudent() -
我做到了,但我仍然收到此错误@Qirel
标签: php laravel eloquent relational-database laravel-6