SQLSTATE [23000]:完整性约束违规:在Laravel 5.2中

时间:2017-08-19 08:27:23

标签: php mysql laravel-5

我需要将Project Model id作为project_id传递给My Task Model表。这是我的TaskController

     public function store(Request $request, Project $project)
{
    $task = new Task;
    $task->task_name   = $request->input('name');
    $task->body = $request->input('body');
    $task->assign = $request->input('status');
    $task->priority = $request->input('status');
     $task->duedate  = date("Y-m-d", strtotime($request->input("date")));
     $task->project_id = $project->id;


    // This will set the project_id on task and save it
    $project->tasks()->save($task);
}

这是关于在项目文件夹刀片文件中存储任务数据的My form行动路线是show.blade.php

<form method="post" action="{{ route('tasks.store') }}">

这是任务模式

<?php

namespace App;

use App\User;
use App\Auth;
use App\Project;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
     protected $fillable = ['task_name', 'body', 'assign','priority','duedate','project_id'];



      public function scopeProject($query, $id)
    {
        return $query->where('project_id', $id);
    }


     public function projects()
     {
         return $this->belongsTo('App\Project');
     }


    //
}

这是项目模型

 {
        protected $fillable = ['project_name','project_notes','project_status','color','group'];
        //

        public function tasks(){
             return $this->hasMany('App\Task');
    }


but I got this error massage here

SQLSTATE [23000]:完整性约束违规:1048列&#39; project_id&#39;不能为空  如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

在store()函数中,您不会为任务提供project_id。

因此,当您保存任务时,它会使project_id行为null。默认情况下,行不允许这样做。这就是你得到这个错误的原因。

我认为添加这一行会起作用:

 $task->project_id = $project->id;

您还可以在迁移中使project_id为空。如果这样做,则允许project_id为null。但我不认为那是你想要的东西。

答案 1 :(得分:0)

仅将project_id字段设置为有效值或为零(如果它没有唯一索引)

答案 2 :(得分:0)

在您的迁移文件中,您没有提到project_id为null。 如果你不是

,你必须以这种方式添加project_id
$table->string('project_id')->nullable();

如果你没有那样使用那么你必须将project_id作为有效值传递,如0或任何但不是null。 看到错误。它说project_id不能为null。所以你不能使用null值作为project_id。

你在数据库中说过project_id不是null但是发送空值就是你遇到这个错误的原因。希望你明白。