【问题标题】:SQLSTATE[23000]:Integrity constraint violation: 1048 Column 'giorno_raccolta_id' cannot be nullSQLSTATE [23000]:违反完整性约束:1048 列 'giorno_raccolta_id' 不能为空
【发布时间】:2021-08-16 18:38:52
【问题描述】:

Calendar

我正在使用 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))

  1. 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'
    ]);
}



 }

我还有一个问题,当我去保存数据库中的数据时,什么都没有保存。 你能帮我解决应用问题吗?

我从另外两个表格中恢复的拒绝日期和类型:

  1. 天数表

          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


【解决方案1】:

我建议您将 $fillable 设为 $fillable 并将您想要使其可批量分配的属性传递给 https://laravel.com/docs/8.x/eloquent#mass-assignment。另一方面,我看到您所有的选择元素都具有相同的 id,因为 DOM id 元素必须是唯一的。最后,检查 $request 收到数据的 create 方法

....(Request $request)
{
   dd($request)
}

【讨论】:

  • 现在我有以下问题: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'days.note_id' in 'where clause' (SQL: select * from days where days .note_id = 1 和days.note_id 不为空限制1)(查看:C:\Users\Piero\Desktop\Prova\recycle\resources\views\calendar\index.blade.php)跨度>
  • 检查Notes和Days之间的一对一关系,它是错误的。 laravel.com/docs/8.x/eloquent-relationships#one-to-one
  • 我有两个问题,第一个我无法在数据库中添加和保存数据;第二个我想检索日期的名称、收集的日期和废物的类型。
猜你喜欢
  • 2021-02-01
  • 2019-11-20
  • 2019-10-06
  • 2020-10-25
  • 2017-02-28
  • 2017-04-15
  • 2017-12-26
  • 2019-11-24
  • 2018-01-25
相关资源
最近更新 更多