【发布时间】:2021-05-23 05:21:29
【问题描述】:
我正在构建一个调查应用程序,用户只能选择以下选项之一:1 = 非常不同意,2 = 非常同意,3 = 不同意或不同意,4 = 同意,5 = 非常同意。
我正在使用 Laravel,其中 principal_questionnaires 是父表,checklists 是子表。 我想要实现的是当用户选中其中一个单选按钮时,必须将单个数字(无论是 1、2、3、4 还是 5)作为值插入到清单列中的清单表中。但是当我单击提交时,清单值返回 null。我为这个问题苦苦挣扎了 3 周。我在 3 周内为此做了很多研究,但没有肯定的结果。任何人都可以帮助解决这个问题吗?
下面是我的代码:
问卷口才模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
//questionnaire model
class PrincipalQuestionnaire extends Model{
protected $fillable = ['questionnaires'];
protected $casts = [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
//questionnaire has many checklists
public function surveyChecklists() {
return $this->hasMany(SurveyChecklist::class, 'principal_questionnaire_id', 'id');
}
}
清单 Eloquent 模型
class SurveyChecklist extends Model
{
public $table = 'survey_checklists';
protected $fillable = [
'user_id', 'principal_questionnaire_id', 'checklist'
];
protected $casts = [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
//checklists belong to a questionnaire
public function principalQuestionnaire()
{
return $this->belongsTo(PrincipalQuestionnaire::class, 'principal_questionnaire_id');
}
控制器的存储操作
public function store(Request $request)
{
$form_data = array(
'user_id' => Auth::user()->id,
'principal_questionnaire_id' => $request->principal_questionnaire_id,
'checklist' => $request->checklist
);
SurveyChecklist::create($form_data);
刀片页面
@foreach($principal->principalQuestionnaires as $mysurvey)
<div class="row survey-row">
<div class="col-md-7">
<p>
{{ $mysurvey->questionnaires }}
</p>
</div>
<div class="col-md-1">
<label class="radio-inline">
<input type="radio" name="checklist{{ $mysurvey->id }}" value="1" class="form-
check-input" required>
<input type="hidden" name="user_id" value="{{ old('user_id', isset($questionnire) ?
$questionnire->user_id : '') }}">
<input type="hidden" name="principal_questionnaire_id" value="{{ $mysurvey->id }}">
</label>
</div>
<div class="col-md-1">
<label class="radio-inline">
<input type="radio" name="checklist{{ $mysurvey->id }}" value="2" class="form-
check-input" required>
</label>
</div>
<div class="col-md-1">
<label class="radio-inline">
<input type="radio" name="checklist{{ $mysurvey->id }}" value="3" class="form-
check-input" required>
</label>
</div>
<div class="col-md-1">
<label class="radio-inline">
<input type="radio" name="checklist{{ $mysurvey->id }}" value="4" class="form-
check-input" required>
</label>
</div>
<div class="col-md-1">
<label class="radio-inline">
<input type="radio" name="checklist{{ $mysurvey->id }}" value="5" class="form-
check-input" required>
</label>
</div>
</div>
@endforeach
浏览器上的页面
这是抛出的异常:
Illuminate\Database\QueryException
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'checklist' cannot be null (SQL: insert
into `survey_checklists` (`user_id`, `principal_questionnaire_id`, `checklist`, `updated_at`,
`created_at`) values (1, 39, ?, 2021-02-20 10:59:12, 2021-02-20 10:59:12))
【问题讨论】:
-
将 name="checklist{{ $mysurvey->id }}" 更改为 name="checklist"。这就是你需要做的所有事情
-
我按照您的建议进行了尝试,但现在收音机的行为发生了变化。它现在只检查整个应用程序一次。并将其他行留空。
标签: php mysql laravel eloquent radio-button