【问题标题】:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails LaravelSQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 Laravel
【发布时间】:2017-04-13 10:38:16
【问题描述】:

我有两张表,一张用于用户,一张用于新项目。我在 items 表中的 users 表中引用了 id。

 public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->string('item_title');
            $table->timestamps();
        });

        Schema::table('items', function($table) {
             $table->foreign('user_id')->references('id')->on('users');
        });

这是我添加新项目的控制器

public function storeItem(Request $request){
        $user = Auth::user();

        $item = new Item([
            'user_id' => $user->id,
            'item_title' => $request->input('title'),
        ]);

        $item->save();    
    }

但是当我提交表单时出现此错误SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (database.items, CONSTRAINTitems_user_id_foreignFOREIGN KEY (user_id) REFERENCESusers(id))

有什么想法吗?

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    好的,首先尝试修复您的迁移:

    public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->string('title');
            $table->timestamps();
    
            $table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');
        });
    }
    
    public function down()
    {
        Schema::drop('items');
    }
    

    运行$ php artisan migrate:refresh

    注意:使用前缀“item_”看起来很糟糕,您已经有名为 item(s) 的表,所以删除前缀...正确命名您的列

    控制器(方法)

    public function storeItem(Request $request, App\Item $item) 
    {
        $user = $request->user(); // get current user making the request
    
        $data = array_merge($request->only(['title']), ['user_id' => $user->id]);
        $newItem = $item->create($data);
        //$newItem has instance of your created item
    }
    

    注意:请记住在您的 Item 模型中正确填写 $fillable 数组(在这种情况下,它应该只有 'title''user_id'

    【讨论】:

      【解决方案2】:

      你有一个错字,应该是:

      $table->integer('user_id')->unsigned();
      

      【讨论】:

      • 我编辑了,这是错误,但那不是错误,我又遇到了那个错误
      • 好吧,你复制粘贴了错误的代码,所以我猜你用它运行了migrate 命令。修复此问题后,您是否运行了 migrate:refreshmigrate:rollback 命令?如果是,您是否收到任何错误消息?
      • 是的,是的,我又迁移了一次,没有任何改变,我需要做一些关系函数吗?
      【解决方案3】:

      试试这个代码,
      $user = Auth::user(); $项目=新项目([ 'item_title' => $request->input('title') ]); $item->user()->add($user); $item->保存();

      您必须在 Item 模型中定义用户关系。

      【讨论】:

      • 我现在有这个错误BadMethodCallException in Builder.php line 2448: Call to undefined method Illuminate\Database\Query\Builder::add()
      【解决方案4】:

      在你的项目模型中写下代码:

      protected $table = 'items';
      protected $fillable = ['user_id', 'title'];
      

      那就试试吧

      【讨论】:

        猜你喜欢
        • 2014-01-09
        • 2017-11-23
        • 1970-01-01
        • 2018-02-12
        • 2021-09-29
        相关资源
        最近更新 更多