【发布时间】:2021-08-16 18:38:52
【问题描述】:
我正在使用 Laravel 8 开发一个应用程序来显示单独废物收集的每周日历,但是当我按下添加日期按钮时,出现以下错误:SQLSTATE [23000]:完整性约束违规:1048 列' giorno_raccolta_id' 不能为空(SQL:插入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);
}
}
【问题讨论】:
-
Note模型中实现fillable还是guarded???
-
是的,我实现了可填充
标签: php mysql laravel-8 eloquent-relationship recycle