SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败Laravel

时间:2016-11-29 12:21:05

标签: laravel laravel-5

我有两个表,一个用于用户,一个用于新项。我在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 (数据库., CONSTRAINT items_user_id_foreign FOREIGN KEY ( user_id ) REFERENCES用户( id { {1}}

有什么想法吗?

4 个答案:

答案 0 :(得分: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_”看起来很糟糕,您已经将表格命名为项目,因此请删除前缀...正确命名您的列

控制器(方法)

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'

答案 1 :(得分:0)

你有一个错字,它应该是:

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

答案 2 :(得分:-1)

试试这段代码,
    $ user = Auth :: user();     $ item = new Item([         'item_title'=> $请求 - >输入( '标题')     ]);     $本期特价货品>用户() - >添加($用户);     $本期特价货品>保存();

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

答案 3 :(得分:-1)

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

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

然后尝试