【问题标题】:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null error when assign forien key value?SQLSTATE [23000]:完整性约束违规:1048 列 'user_id' 在分配 forien 键值时不能为空错误?
【发布时间】:2019-02-12 00:17:09
【问题描述】:

我想分配外键值。 p_members 表中的外键是 user_id。原始键是all_users 表中的userId。但是当我尝试这样做时会出现以下错误。

我创建单独的两个表来获取用户详细信息并获取p-member 详细信息。

我是 Laravel 的初学者。

错误:

SQLSTATE[23000]:违反完整性约束:1048 列“user_id” 不能为空(SQL:插入到`p_members`(`addNo`,`addStreet`, `addCity`、`intentToJoin`、`user_id`、`updated_at`、`created_at`) 值 (qwertfgyhj, ertfyguhj, erdftgyhuj, ertfgyhjk, , 2018-09-06 2018-09-06 16:38:19 16:38:19))

我的控制器是:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\allUser;
use App\ORFOL;
use App\pMember;

class userController extends Controller
{
    public function storeUsers(Request $request){
            $table1=new allUser();


            $table1->nameWithInitials = $request->input('name');
            $table1->callingName      = $request->input('callingName');
            $table1->email            = $request->input('email');
            $table1->NIC              = $request->input('nic');
            $table1->contactNo        = $request->input('contactNo');
            $table1->password         = bcrypt($request->input('password'));
            $table1->type             = $request->input('type');

            $table1->save();


        if($request->input('type') == 'P-Member'){
            $table2=new pMember();

            $table2->addNo            = $request->input('addNo');
            $table2->addStreet        = $request->input('addStreet');
            $table2->addCity          = $request->input('addCity');
            $table2->intentToJoin     = $request->input('intentToJoin');

            $table2->user_id          = $table1->userId;

            $table2->save();
            return view('familyMember');

        }

        if(($request->input('type')) =='OR-FOL' ){
            $table3=new ORFOL();

            $table3->region           = $request->input('region');
            $table3->user_id          = $table1->userId;

            $table3->save();

        }

        if(($request->input('type')) =='' ){
            $table3=new ORFOL();

            $table3->region           = $request->input('region');
            $table2->user_id          = $table1->userId;

            $table3->save();

        }


        return redirect()->back();
    }
}

【问题讨论】:

  • 如果allUser的主键是id,那么你需要使用$table2-&gt;user_id = $table1-&gt;id;。如果应该是userId,则需要确保将其设置为allUser 中的主键。
  • 我已经这样做了。
  • 做哪个部分? allUser 的架构以及类是什么?
  • 检查table1保存操作是否失败。如果保存操作成功,则 userId 可用

标签: php mysql laravel


【解决方案1】:

出现此错误是因为user_id 值未发送,它可能为空或未定义。

$table2->user_id          = $table1->userId; //problem here

$table2->save();

在上面看到你的最后两行

保存前,尝试dd()user_id

像这样:dd($table1-&gt;userId) 保存之前。

或者

注意:这样做可以避免错误,但可以让您在没有user_id 的情况下编写代码

你可以让 user_id 在你的迁移中为空

示例:$table-&gt;string('user_id')-&gt;nullable();

运行后:php artisan migrate:refresh

【讨论】:

    【解决方案2】:

    放入你的模型:

    protected $primaryKey = 'userId';
    

    【讨论】:

      【解决方案3】:

      您正尝试从$table1-&gt;userId 中的$table1 获取userId,请确保您在allUser 模型中具有该属性。

      并确保 pMember 模型中的 user_id$fillable 下具有其他属性,例如:

      protected $fillable = [ 'addNo', 'addStreet', 'addCity', 'intentToJoin', 'user_id', ...];
      

      【讨论】:

      • 您必须与我们讨论,以便我们提供帮助,我已向您提出建议,您检查了吗?错误还是一样吗?
      • 在您所做的更改和问题中的模型两个之后发布新的控制器代码,这样我们就可以看到我们目前的位置。
      • 我只更改 p 成员和所有用户模型。(从添加受保护的可填充)我如何更改控制器??
      • 干得好,那么当您在保存之前使用$table1-&gt;userId = "value you want here" 定义$table1 时,您需要将userId 添加到表中
      猜你喜欢
      • 1970-01-01
      • 2020-10-26
      • 2018-05-01
      • 2021-01-13
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2019-11-20
      相关资源
      最近更新 更多