laravel - 创建一个注册用户可以做的测试部分,但目前测试可以做很多次,我希望他们只能做一次
问题描述
我正在使用 laravel 7
如果用户已经参加了测试,我需要加载另一个不同的视图
这是我的测试控制器
public function index()
{
$categories = Category::with(['categoryQuestions' => function ($query) {
$query->orderBy('id')
->with(['questionOptions' => function ($query) {
$query->orderBy('id');
}]);
}])
->whereHas('categoryQuestions')
->get();
return view('client.test', compact('categories'));
}
public function store(StoreTestRequest $request)
{
$options = Option::find(array_values($request->input('questions')));
$result = auth()->user()->userResults()->create([
'total_points' => $options->sum('points')
]);
$questions = $options->mapWithKeys(function ($option) {
return [$option->question_id => [
'option_id' => $option->id,
'points' => $option->points
]
];
})->toArray();
$result->questions()->sync($questions);
return redirect()->route('client.results.show', $result->id);
}
}
这是结果表连接到用户表的方式
这是我添加与用户表的关系的迁移;
class AddRelationshipFieldsToResultsTable extends Migration
{
public function up()
{
Schema::table('results', function (Blueprint $table) {
$table->unsignedInteger('user_id');
$table->foreign('user_id', 'user_fk_773765')->references('id')->on('users');
});
}
}
解决方案
更新您的索引方法以检查结果表。假设您有一个Result
模型,用于您的results
表。
public function index()
{
$existingTest = Result::where('user_id', Auth::user()->id)->first();
if(isset($existingTest->id)) {
//Return your other view or run logic specific to if the user has already done the test.
return view('client.test-complete');
}
$categories = Category::with(['categoryQuestions' => function ($query) {
$query->orderBy('id')
->with(['questionOptions' => function ($query) {
$query->orderBy('id');
}]);
}])->whereHas('categoryQuestions')
->get();
return view('client.test', compact('categories'));
}
推荐阅读
- postgresql - 如何在 PostgreSQL 中编写具有两个表输入和一个表输出的函数?
- maven - 将 jar 部署到 Wildfly 服务器?
- c++ - 如何根据 set.begin() 的偏移量迭代 std::set?
- rust - 如何推导出变量的泛型类型?
- azure - 读取已上传到 Azure Batch 的应用程序中的资源文件
- ios - 如何在 intune 上阻止 iOS 屏幕捕获
- python - 在 Azure Functions 中使用 Pandas
- javascript - 在 reactjs 如何取消 onbeforeunload 事件?,,,, 请有人在 jsfiddle,sandbox 等上举个例子,,,
- python - python中的条件字符串替换
- angular - 如何通过通过 rxjs 选择的动态过滤器过滤数组