如何解决SQLSTATE[23000]:违反完整性约束:1048 列“giorno_raccolta_id”不能为空
我正在使用 Laravel 8 开发一个应用程序来显示单独垃圾收集的每周日历,但是当我按下添加日期按钮时,出现以下错误:sqlSTATE [23000]: 完整性约束违规:1048 列' giorno_raccolta_id' 不能为空 (sql: insert into notes
( collection_day_id
,start_time
, end_time
,updated_at
, created_at
) 值 (?,?,2021-05-28 12:48:04,2021-05-28 12:48:04))
-
Form.blade.PHP
<div class="input-group mb-3"> <label class="input-group-text" for="inputGroupSelect01">Giorno</label> <select name="giorno" class="form-select" id="inputGroupSelect01"> @foreach ($days as $day) <option value="{{$day->id}}" {{$note->giorno_id == $day->id ? 'selected' : ''}} >{{$day->giorno}}</option> @endforeach </select> </div> @if($errors->has('giorno')) <div class="alert alert-danger" role="alert"> {{ $errors->first('giorno')}} </div> @endif <div class="input-group mb-3"> <label class="input-group-text" for="inputGroupSelect01">Tipologia</label> <select name="tipologia" class="form-select" id="inputGroupSelect01"> @foreach ($categories as $c) <option value="{{$c->id}}" {{$note->tipologia_id == $c->id ? 'selected' : ''}} >{{$c->categoria}}</option> @endforeach </select> </div> @if($errors->has('tipologia')) <div class="alert alert-danger" role="alert"> {{ $errors->first('tipologia')}} </div> @endif <div class="input-group mb-3"> <label class="input-group-text" for="inputGroupSelect01">Giorno raccolta</label> <select name="giorno_raccolta_id" class="form-select" id="inputGroupSelect01"> @foreach ($days as $day) <option value="{{$day->id}}" {{$note->giorno_raccolta_id == $day->id ? 'selected' : ''}} >{{$day->giorno}}</option> @endforeach </select> </div> @if($errors->has('giorno_raccolta_id')) <div class="alert alert-danger" role="alert"> {{ $errors->first('giorno_raccolta_id')}} </div> @endif <div class="input-group mb-3"> <label class="input-group-text">Ora inizio</label> <input type="time" name="ora_inizio"> </div> @if($errors->has('ora_inizio')) <div class="alert alert-danger" role="alert"> {{ $errors->first('ora_inizio')}} </div> @endif <div class="input-group mb-3"> <label class="input-group-text">Ora fine</label> <input type="time" name="ora_fine"> </div> @if($errors->has('ora_fine')) <div class="alert alert-danger" role="alert"> {{ $errors->first('ora_fine')}} </div> @endif @csrf
2.表格注释
public function up()
{
Schema::create('notes',function (Blueprint $table) {
$table->increments('id')->start_from(1);
$table->unsignedInteger('giorno_id');
$table->unsignedInteger('tipologia_id');
$table->unsignedInteger('giorno_raccolta_id');
$table->time('ora_inizio');
$table->time('ora_fine');
$table->timestamps();
});
}
3.WeekController
<?PHP
namespace App\Http\Controllers;
use App\Models\note;
use App\Models\Day;
use Illuminate\Http\Request;
class WeekController extends Controller
{
public function index(){
$notes = note::all();
return view('calendar.index',compact('notes'));
}
public function create(){
$days = Day::all();
$categories = Category::all();
$notes = new note();
return view('calendar.create',compact('days','categories','notes'));
}
public function store(){
note::create($this->validateRequest());
return redirect()->route('calendar.index');
}
public function show(note $note){
$note = note::find($note)->first();
return view('calendar.show',compact('note'));
}
public function edit(note $note){
$days = Day::all();
return view('calendar.edit',compact('note','days'));
}
public function update(note $note){
$note ->update($this->validateRequest());
return redirect()->route('calendar.show',$note->id);
}
public function destroy(note $notes){
$notes->delete();
return redirect()->route('calendar.index');
}
private function validateRequest(){
return request()->validate([
'giorno_id' => 'required|unique:notes','tipologia' => 'required','giorno_raccolta' => 'required','ora_inizio' => 'required','ora_fine' => 'required'
]);
}
}
我还有一个问题,当我去保存数据库中的数据时,什么也没有保存。 你能帮我排查应用问题吗。
我从另外两个表中恢复的拒绝日期和类型:
-
天数表
public function up() { Schema::create('days',function (Blueprint $table) { $table->id(); $table->string('giorno'); $table->timestamps(); }); }
2.类别表
public function up()
{
Schema::create('categories',function (Blueprint $table) {
$table->id();
$table->string('categoria');
$table->timestamps();
});
}
笔记模型
<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Day;
class note extends Model
{
use HasFactory;
protected $fillable = [];
protected $guarded = ['id'];
public function days(){
return $this->hasOne(Day::class);
}
}
日间模型
<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\note;
use App\Models\Category;
class Day extends Model
{
use HasFactory;
public function notes(){
return $this->hasOne(note::class);
}
public function category(){
return $this->belongsTo(category::class);
}
}
类别模型
<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Model\Day;
class Category extends Model
{
use HasFactory;
public function days(){
return $this->hasMany(Day::class);
}
}
解决方法
我建议您制作 $fillable 并将您想要使其批量分配的属性传递给它 https://laravel.com/docs/8.x/eloquent#mass-assignment。另一方面,我看到您的所有 select 元素都具有相同的 id,因为 DOM id 元素必须是唯一的。最后,检查 $request 接收数据的 create 方法
....(Request $request)
{
dd($request)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。