Php Laravel编辑答案和问题连接
我正在编写一个测验应用程序,我有一个编辑功能,可以编辑不同的问题。现在我尝试将答案编辑与问题编辑连接起来,但我不知道如何连接 我是拉威尔的初学者,如果你能帮我的话,那就太好了。 我的代码如下。如果你还需要什么,请告诉我 My web.phpPhp Laravel编辑答案和问题连接,php,mysql,laravel,eloquent,laravel-8,Php,Mysql,Laravel,Eloquent,Laravel 8,我正在编写一个测验应用程序,我有一个编辑功能,可以编辑不同的问题。现在我尝试将答案编辑与问题编辑连接起来,但我不知道如何连接 我是拉威尔的初学者,如果你能帮我的话,那就太好了。 我的代码如下。如果你还需要什么,请告诉我 My web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProductController; use App\Http\Controllers\MainControll
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\MainController;
use App\Http\Controllers\QuizController;
use App\Http\Controllers\DashboardController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
Route::get('dashboard', 'App\Http\Controllers\DashboardController@index')->name('dashboard');
Route::get('quiz/create', 'App\Http\Controllers\QuizController@create');
Route::post('quiz', 'App\Http\Controllers\QuizController@store');
Route::get('quiz/{quiz?}', 'App\Http\Controllers\QuizController@show')->name('quiz/show');
Route::get('quiz/{quiz}/questions/create', 'App\Http\Controllers\QuestionController@create');
Route::post('quiz/{quiz}/questions', 'App\Http\Controllers\QuestionController@store');
Route::delete('quiz/{quiz}/questions/{question}', '\App\Http\Controllers\QuestionController@destroy');
Route::get('question/{question}', '\App\Http\Controllers\QuestionController@edit')->name('question/edit');
Route::patch('question/{question}', '\App\Http\Controllers\QuestionController@update')->name('question/update');
Route::get('startquiz/{quiz}-{slug}', 'App\Http\Controllers\StartQuizController@show');
Route::post('startquiz/{quiz}-{slug}', 'App\Http\Controllers\StartQuizController@store');
应答模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Answer extends Model
{
protected $guarded = [];
public function question() {
return $this->belongsTo(Question::class);
}
public function responses() {
return $this->hasMany(QuizResponses::class);
}
}
您正在控制器中提供一个问题
return view('quiz.edit', compact('question'));
但没有提供您在刀片中使用的答案变量:
<input type="text" class="form-control" name="answer" value="{{ $answer->name }}" placeholder="Enter your new answer">
因为您还必须压缩编辑功能$answer:
return view('quiz.edit', compact('question','answer'));
在编辑函数中,应答变量不存在,因为压缩函数包含变量及其值。要解决您的问题,您必须使用数据库中的值创建应答对象。我将以下面的代码为例
use App\Models\Answer;
...
public function edit(Question $question) {
$answers = $question->answers();
return view('quiz.edit', compact('question', 'answers'));
}
编辑
在编辑功能中,用$answers替换$answers。在blade.php中,可以使用以下代码
@foreach($answers as $answer)
<div class="form-group">
<label for="question">Answer {{$loop->iteration}}</label>
<input type="text" class="form-control" name="answer{{$loop->iteration}}" value="{{ $answer->name }}" placeholder="Enter your new answer">
<small id="answerHelp" class="form-text text-muted">Type in your edited answer.</small>
</div>
@endforeach
由于上下文正在编辑现有的问题,因此很可能正在编辑的问题已经有答案或没有答案 因此,控制器编辑方法应该是 公共职能编辑问题$问题{ $answers=$question->answers; 返回视图'quick.edit',压缩'question','answers'; } 在blade表单中,您可以迭代与问题相关的答案
<div class="col-xs-12">
@foreach($answers as $answer)
<div class="form-group">
<label for="answer{{ $loop->iteration }}">Answer {{ $loop->iteration }}</label>
<input type="text" class="form-control" name="answer{{ $loop->iteration }}" value="{{ $answer->answer }}">
<small id="answerHelp" class="form-text text-muted">Type in your edited answer.</small>
</div>
@endforeach
</div>
可能出现未定义属性$name的错误是因为您在其中一条注释中发布的answers表的迁移显示answers表没有name列-您可能应该在blade代码段中将value={{{$answer->name}}更改为value={{{$answer->answer}}我更改了它,但现在又出现了另一个错误。你可以在我上面的问题中看到。当你编辑一个问题时,它可以有答案,对吗?所以在这种情况下,您不应该将Answer类的新实例分配给$answers变量。您可以在上面看到,您可能需要在控制器函数中执行类似$answer=$question->answer的操作。至少,如果你已经定义了一个问题和答案之间的关系,那么这个关系就会起作用。学习关系的地方是我做了,我的问题模型与答案有关系。你可以在上面我的问题模型中看到这一点。现在我得到了error Undefined属性:illumb\Database\Eloquent\Relations\HasMany::$name View:/home/vagrant/code/quizapp/resources/views/quick/edit.blade。php@Leonie113m当您试图在foreach循环内的blade snippet中获取值={{{$answer->name}}时,可能会出现错误。而迁移显示answers表没有name列。可能它应该是value={$answer->answer}}}在foreach循环中,答案应该有一个App\Models\answer的实例,而在上面的转储中,它显示App\Models\QuestionComments不用于扩展讨论;这段对话已经结束。
return view('quiz.edit', compact('question','answer'));
use App\Models\Answer;
...
public function edit(Question $question) {
$answers = $question->answers();
return view('quiz.edit', compact('question', 'answers'));
}
@foreach($answers as $answer)
<div class="form-group">
<label for="question">Answer {{$loop->iteration}}</label>
<input type="text" class="form-control" name="answer{{$loop->iteration}}" value="{{ $answer->name }}" placeholder="Enter your new answer">
<small id="answerHelp" class="form-text text-muted">Type in your edited answer.</small>
</div>
@endforeach
<div class="col-xs-12">
@foreach($answers as $answer)
<div class="form-group">
<label for="answer{{ $loop->iteration }}">Answer {{ $loop->iteration }}</label>
<input type="text" class="form-control" name="answer{{ $loop->iteration }}" value="{{ $answer->answer }}">
<small id="answerHelp" class="form-text text-muted">Type in your edited answer.</small>
</div>
@endforeach
</div>