【发布时间】:2020-11-03 10:46:13
【问题描述】:
在我的项目中,用户在注册时只能选择一项考试。但登录网站后,用户可以添加另一个考试。现在的问题是,如果用户在注册时选择了一项特定的考试,他就不能再次添加相同的考试。换句话说,我只想向该用户显示他/她未添加的未选择考试。因为我在用户模型中实现了多对多关系。
1) 用户.php
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
protected $primaryKey = 'uid';
public function exams()
{
return $this->belongsToMany(exam::class, 'exam_user', 'user_id', 'exam_id')->withTimeStamps();
}
}
2) UsersController.php
class UsersController extends Controller
{
public function __construct()
{
$this->middleware(['auth','verified']);
}
public function fetchExams()
{
$users = Auth::user();
$exams_model = exam::all();
return view('user.myExam', compact('users', 'exams_model'));
}
}
3) myExam.blade.php
- 在此视图中,用户可以看到他/她在一张表中选择了哪个考试,但我想要 向用户显示该用户未特别选择的考试。
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-6">
<h2>Your Exams</h2>
@foreach ($users->exams as $exam)
<p><kbd style="background-color: green; font-size: 16px;">{{$exam->exam_name}}</kbd></p>
@endforeach
</div>
<div class="col-md-6">
<form action="/addExam" method="POST">
@csrf
<h2>Add new exam</h2>
@foreach ($exams_model as $ex)
<p><input type="checkbox" name="{{$ex->eid}}"> <kbd style="background-color: lightblue; color: black; font-size: 16px;">{{$ex->exam_name}}</kbd></p>
@endforeach
</form>
</div>
</div>
</div>
@endsection
4) 用户表
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('uid');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('phone')->unique();
$table->boolean('status')->default(0);
$table->string('password');
$table->string('profile_image')->default('default.jpg');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
5) 考试表
class CreateExamsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('exams', function (Blueprint $table) {
$table->increments('eid');
$table->string('exam_name')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('exams');
}
}
6)exam_user 表
- 此表将 user_id 和exam_id 存储为外键。
class CreateUserExamsPivotTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('exam_user', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('exam_id');
$table->foreign('exam_id')->references('eid')->on('exams');
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('uid')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('exam_user');
}
}
【问题讨论】:
标签: php mysql laravel eloquent laravel-7