Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel编辑答案和问题连接_Php_Mysql_Laravel_Eloquent_Laravel 8 - Fatal编程技术网

Php Laravel编辑答案和问题连接

Php 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

我正在编写一个测验应用程序,我有一个编辑功能,可以编辑不同的问题。现在我尝试将答案编辑与问题编辑连接起来,但我不知道如何连接

我是拉威尔的初学者,如果你能帮我的话,那就太好了。 我的代码如下。如果你还需要什么,请告诉我

My web.php

<?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>