学生和课程之间有很多很多的关系。
下面是我的模型和透视表:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
use HasFactory;
protected $fillable = [
'name',
'surname',
'age',
'tdah',
'description',
'hobbies',
];
/* public function course(){
return $this->belongsTo(Course::class);
} */
public function data(){
return $this->hasMany(Datum::class, 'student_id', 'id');
}
public function configurations(){
return $this->hasMany(Configuration::class, 'student_id', 'id');
}
public function courses(){
return $this->belongsToMany(Course::class, 'course_student', 'student_id', 'course_id');
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Course extends Model
{
use HasFactory;
protected $fillable = [
'name',
'academic_course_id',
'user_id',
];
public function user()
{
return $this->belongsTo(User::class);
}
public function academicCourse()
{
return $this->belongsTo(AcademicCourse::class);
}
public function planification(){
return $this->hasOne(Planification::class, 'course_id', 'id');
}
public function subjects(){
return $this->hasMany(Subject::class, 'course_id', 'id');
}
/* public function students(){
return $this->hasMany(Student::class, 'course_id', 'id');
} */
public function students(){
return $this->belongsToMany(Student::class, 'course_student', 'course_id', 'student_id');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('course_student', function (Blueprint $table) {
$table->id();
$table->foreignId('course_id')->constrained()->onDelete('cascade');
$table->foreignId('student_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('course_student');
}
};
我想创建一个属于某个组的学生。我知道如何创建学生和组,但我想在course_student透视表中为该学生创建一个注册表。我的StudentController方法存储为:
public function store(Request $request)
{
Student::create($request->all());
$courses = Course::all();
$academicCourses = AcademicCourse::all();
return view('course.index', compact('courses', 'academicCourses'));
}
它创建了一个新的学生,但我不知道如何为透视表创建一个新的注册表。
我想做的事情是这样的:
course_student::create(request)
在我的存储方法中,但我认为不是那样。
2条答案
按热度按时间ndh0cuux1#
https://laravel.com/docs/9.x/eloquent-relationships#updating-many-to-many-relationships
e4yzc0pl2#
在Laravel中,您可以使用attach函数来完成此操作,Attach()函数有两个参数:
1-在您情况下的另一个外键是attach(course_id)。
2-(可选)数据透视表中任何其他列的数组,例如:
在本例中,您将通过student模型中的对象在透视表(course_student)中创建记录。
注意:还有另一个方法可以做相反的事情**detach()**但是你需要小心使用它如果你不带任何参数的话它会删除(course_student)里面所有属于student对象的记录所以指定你想要删除的课程:
希望这能帮到你...