Laravel:Relations Exercices
Soit le Schéma Relationnel
Teachers(id,name)
Subjects(id,name)
teacher_subject(id,teacher_id,subject_id)
Students(id,name,email)
student_subject(id,student_id,subject_id)
Libraries(id,name)
Books(id,library_id ,title)
author_book(id,author_id ,book_id)
Authors(id,name,email)
Créer les migrations et les modèles
Migration des enseignants (create_teachers_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('teachers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('teachers');
}
};
Migration des matières (create_subjects_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('subjects', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('subjects');
}
};
Migration de la relation enseignant-matière (create_teacher_subject_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('teacher_subject', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('teacher_id');
$table->unsignedBigInteger('subject_id');
$table->timestamps();
$table->foreign('teacher_id')->references('id')->on('teachers');
$table->foreign('subject_id')->references('id')->on('subjects');
});
}
public function down()
{
Schema::dropIfExists('teacher_subject');
}
};
Migration des étudiants (create_students_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('students');
}
};
Migration de la relation étudiant-matière (create_student_subject_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('student_subject', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('student_id');
$table->unsignedBigInteger('subject_id');
$table->timestamps();
$table->foreign('student_id')->references('id')->on('students');
$table->foreign('subject_id')->references('id')->on('subjects');
});
}
public function down()
{
Schema::dropIfExists('student_subject');
}
};
Modèle de l'enseignant (Teacher.php) :
use Illuminate\Database\Eloquent\Model;
class Teacher extends Model
{
protected $table = 'teachers';
protected $primaryKey = 'id';
protected $fillable = ['name'];
public function subjects()
{
return $this->belongsToMany(Subject::class, 'teacher_subject', 'teacher_id', 'subject_id');
}
}
Modèle de la matière (Subject.php) :
use Illuminate\Database\Eloquent\Model;
class Subject extends Model
{
protected $table = 'subjects';
protected $primaryKey = 'id';
protected $fillable = ['name'];
public function teachers()
{
return $this->belongsToMany(Teacher::class, 'teacher_subject', 'subject_id', 'teacher_id');
}
public function students()
{
return $this->belongsToMany(Student::class, 'student_subject', 'subject_id', 'student_id');
}
}
Modèle de l'étudiant (Student.php) :
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table = 'students';
protected $primaryKey = 'id';
protected $fillable = ['name', 'email'];
public function subjects()
{
return $this->belongsToMany(Subject::class, 'student_subject', 'student_id', 'subject_id');
}
}
Migration pour la table Libraries (create_libraries_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('libraries', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('libraries');
}
};
Migration pour la table Books (create_books_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('library_id');
$table->string('title');
$table->timestamps();
$table->foreign('library_id')->references('id')->on('libraries');
});
}
public function down()
{
Schema::dropIfExists('books');
}
};
Migration pour la table author_book (create_author_book_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('author_book', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('author_id');
$table->unsignedBigInteger('book_id');
$table->timestamps();
$table->foreign('author_id')->references('id')->on('authors');
$table->foreign('book_id')->references('id')->on('books');
});
}
public function down()
{
Schema::dropIfExists('author_book');
}
};
Migration pour la table Authors (create_authors_table.php) :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('authors', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('authors');
}
};
Modèle pour la table Libraries (Library.php) :
use Illuminate\Database\Eloquent\Model;
class Library extends Model
{
protected $table = 'libraries';
protected $primaryKey = 'id';
protected $fillable = ['name'];
public function books()
{
return $this->hasMany(Book::class);
}
}
Modèle pour la table Books (Book.php) :
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
protected $table = 'books';
protected $primaryKey = 'id';
protected $fillable = ['library_id', 'title'];
public function library()
{
return $this->belongsTo(Library::class);
}
public function authors()
{
return $this->belongsToMany(Author::class, 'author_book', 'book_id', 'author_id');
}
}
Modèle pour la table author_book (AuthorBook.php) :
use Illuminate\Database\Eloquent\Model;
class AuthorBook extends Model
{
protected $table = 'author_book';
protected $primaryKey = 'id';
protected $fillable = ['author_id', 'book_id'];
public function author()
{
return $this->belongsTo(Author::class);
}
public function book()
{
return $this->belongsTo(Book::class);
}
}
Modèle pour la table Authors (Author.php) :
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
protected $table = 'authors';
protected $primaryKey = 'id';
protected $fillable = ['name', 'email'];
public function books()
{
return $this->belongsToMany(Book::class, 'author_book', 'author_id', 'book_id');
}
}