在定义与两个模型(学生和入学)的一对多关系时,我遇到了上述问题。使用以下方法从另一个表访问表时
$enrollment = App\Enrollment::first();
$enrollment->students()->first_name;
我得到了:
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'students.enrollment_id' in 'where clause' (SQL: select * from `students` where `students`.`enrollment_id` = 1 and `students`.`enrollment_id` is not null)'
但是当我使用时:
$enrollment = App\Enrollment::first();
$enrollment->students()->first_name;
我得到了:
PHP error: Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$first_name on line 1
有人可以帮我吗?
注册
protected $fillable = [
'subject_code',
'subject_description',
'section',
'schedule',
'room_no',
'no_of_units'
];
public function students()
{
return $this->hasMany('App\Student');
}
学生
protected $fillable = [
'enrollments_id',
'student_no',
'first_name',
'last_name',
'middle_name',
'birthdate',
'fathers_name',
'mothers_name',
'phone_no',
'degree_id',
'city_id',
'address'
];
public function enrollment()
{
return $this->belongsTo('App\Enrollment');
}
这里是学生和相应报名表
Schema::create('students', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->integer('enrollments_id')->unsigned();
$table->integer('student_no');
$table->foreign('enrollments_id')->references('id')->on('enrollments')->unsigned();
$table->string('first_name');
$table->string('last_name');
$table->string('middle_name');
$table->date('birthdate');
$table->string('fathers_name');
$table->string('mothers_name');
$table->string('phone_no');
$table->string('address');
$table->integer('city_id');
$table->integer('degree_id');
$table->timestamps();
});
Schema::create('enrollments', function (Blueprint $table) {
$table->increments('id');
$table->string('subject_description');
$table->string('subject_code');
$table->time('schedule');
$table->string('room_no');
$table->integer('no_of_units');
$table->string('section');
$table->timestamps();
});
答案 0 :(得分:0)
首先,你想要什么 根据你的问题,我假设你想要注册有很多学生,对于这种关系,你需要在学生表中注册enid_id而不是在注册表中的student_id。 之后使用
$students= Enrolment::find(id)->students;
它将返回所有具有所需注册ID的学生
答案 1 :(得分:0)
这是正常的,因为您尝试从first_name
对象获取属性hasMany
,如果您想要获取get()
个对象(在您的对象中),则应使用Collection
方法案例集合students
):
$enrollment->students()->get();
如果你想获得名字,你应该指定你想从中得到first_name
的对象,例如:
$enrollment->students()->first()->first_name;
$enrollment->students()->last()->first_name;
如果您想获取所有first_name
的{{1}}属性,请使用students
方法,例如:
lists
输出:收集所有学生的名字。
希望这有帮助。
更新
尝试删除$enrollment->students()->lists('first_name');
:
->unsigned()
以及:
$table->increments('id')->unsigned();
答案 2 :(得分:0)
当您在一个雄辩的对象上调用关系时,它实际上会返回关系而不是确切的对象
例如:在你的情况下 $ enrollment-> students()将返回该关系 在哪里 $ enrollment->学生将返回雄辩的对象(属于,有一个关系)和雄辩的对象/对象的集合/数组(在一对多,多对多的关系中)
如果您将其用作属性,只要将其作为函数调用,您将获得实际结果和关系查询
即使您获得了关系,也可以通过调用get on the
来获得结果$ enrollment->学生() - >得到()