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

Posted

技术标签:

【中文标题】SQLSTATE[23000]:违反完整性约束:在 Laravel 5.2 中【英文标题】:SQLSTATE[23000]: Integrity constraint violation: in Laravel 5.2 【发布时间】:2017-08-19 08:27:22 【问题描述】:

我需要将项目模型 ID 作为 project_id 传递给我的任务模型表。这是我的任务控制器

     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);

这是我在项目文件夹刀片文件中存储任务数据的表单操作路线是 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 列 'project_id' 不能为空 如何解决这个问题?

【问题讨论】:

您需要将 store 函数中的 product_id 添加到您正在创建的新任务中。它是空的,因为你现在没有这样做。 你能在这里做示例代码吗?请 阅读@Raiders 答案 请阅读我编辑的TaskController是正确的方式吗? 【参考方案1】:

在你的 store() 函数中,你没有给任务一个 project_id。

因此,当您保存任务时,它会使 project_id 行为空。默认情况下,这不允许用于一行。这就是您收到此错误的原因。

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

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

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

【讨论】:

我应该在哪里添加这一行 $task->project_id = $project->id;? @Raiders 下:$task = 新任务。 Project $project(你给store函数的参数)是你要分配任务的项目吗? 添加了这一行 $task->project_id = $project->id;到 TaskController 存储方法。但是这里发生了同样的错误..... 应该可以完成这项工作:$project 是否可能为空或未分配。替换时会发生什么: $project->tasks()->save($task);用于:$task->save()。否则我不知道。对不起。 我在我的迁移文件中发现了一些错误,这意味着我没有在我的项目和任务文件之间放置主键和外键是这个遮罩的问题【参考方案2】:

在您的迁移文件中,您没有提到 project_id 为空。 如果不是,必须这样添加project_id

$table->string('project_id')->nullable();

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

您在数据库中说 project_id 不为空,而是发送空值,这就是您收到此错误的原因。希望你能理解。

【讨论】:

是的,我明白,但我需要发送 project_id,它不能为空。问题是没有将 project_id 传递给任务模型。 在您的商店功能中,您从哪里获得 $project->id。您只需将 Project $project 对象作为参数传递,而不是表行的任何信息。所以我认为它应该是 null 作为你的代码。将直接 project_id 作为 store 函数的第二个参数传递。 我在我的迁移文件中发现了一些错误,这意味着我没有在我的项目和任务文件之间放置主键和外键是这个遮罩的问题 如果您的迁移问题还没有解决,那么您可以在此处提供您的迁移文件。【参考方案3】:

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

【讨论】:

以上是关于SQLSTATE[23000]:违反完整性约束:在 Laravel 5.2 中的主要内容,如果未能解决你的问题,请参考以下文章

laravel 8 播种,SQLSTATE[23000]:违反完整性约束:

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

SQLSTATE [23000]:违反完整性约束:1052 where 子句中的列 'tenant_id' 不明确

Laravel JOIN SQLSTATE [23000] 问题:违反完整性约束:字段列表中的 1052 列“album_id”不明确

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

Innobyte 插件问题:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行