Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败-Laravel_Php_Mysql_Laravel_Foreign Keys_Constraints - Fatal编程技术网

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

Php SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败-Laravel,php,mysql,laravel,foreign-keys,constraints,Php,Mysql,Laravel,Foreign Keys,Constraints,我知道这个问题已经被问过了,但我仍然找不到我做错了什么 我使用的是框架Laravel 我有两个表(用户和位置)。当我想要创建用户时,我会收到错误消息: SQLSTATE[23000]:完整性约束冲突:1452无法添加或 更新子行:外键约束失败 (festival\u-aidusers,CONSTRAINTfk\u-users\u-locations1外键 (location\u id)删除时引用locations(location\u id) 更新时级联无操作)(SQL:插入到用户(用户id,

我知道这个问题已经被问过了,但我仍然找不到我做错了什么

我使用的是框架Laravel

我有两个表(用户和位置)。当我想要创建用户时,我会收到错误消息:

SQLSTATE[23000]:完整性约束冲突:1452无法添加或 更新子行:外键约束失败 (
festival\u-aid
users
,CONSTRAINT
fk\u-users\u-locations1
外键 (
location\u id
)删除时引用
locations
location\u id
) 更新时级联无操作)(SQL:插入到
用户
用户id
user\u email
location\u id
)值(?,?)(绑定:数组(0=> '1', 1 => 'test@hotmail.com,2=>1',))

表用户

CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_email` VARCHAR(45) NOT NULL,
  `user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_modified` TIMESTAMP NULL,
  `user_deleted` TIMESTAMP NULL,
  `user_lastlogin` TIMESTAMP NULL,
  `user_locked` TIMESTAMP NULL,
  `location_id` BIGINT NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
  CONSTRAINT `fk_users_locations1`
    FOREIGN KEY (`location_id`)
    REFERENCES `festival_aid`.`locations` (`location_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
ENGINE = InnoDB;
表位置

DROP TABLE IF EXISTS `festival_aid`.`locations` ;

CREATE TABLE IF NOT EXISTS `festival_aid`.`locations` (
  `location_id` BIGINT NOT NULL AUTO_INCREMENT,
  `location_latitude` FLOAT NOT NULL,
  `location_longitude` FLOAT NOT NULL,
  `location_desc` VARCHAR(255) NULL,
  `location_type` VARCHAR(45) NULL,
  PRIMARY KEY (`location_id`))
ENGINE = InnoDB;
迁移用户

public function up()
    {
        Schema::table('users', function(Blueprint $table)
        {
            $table->increments('user_id');
            $table->string('user_email');
            $table->timestamp('user_created');
            $table->timestamp('user_modified');
            $table->timestamp('user_deleted');
            $table->timestamp('user_lastlogin');
            $table->timestamp('user_locked');

            $table->foreign('location_id')
                ->references('id')->on('locations');
            //->onDelete('cascade');
        });
    }
迁移位置

public function up()
    {
        Schema::table('locations', function(Blueprint $table)
        {
            $table->primary('location_id');
            $table->float('location_latitude');
            $table->float('location_longitude');
            $table->string('location_desc');
            $table->string('location_type');
        });
    }
模型用户

public function location()
    {
        return $this->belongsTo('Location');
    }
模型位置

 public function user()
    {
        return $this->hasOne('User');
    }
控制器

public function store()
    {
        $input = Input::all();

        $rules = array('user_email' => 'required|unique:users|email');

        $v = Validator::make($input, $rules);

        if($v->passes())
        {
            $user = new User();
            $location = new Location();

            $user->user_email = $input['user_email'];
            //$user->location_id = $input['location_id'];

            $location->location_latitude = $input['location_latitude'];
            $location->location_longitude = $input['location_longitude'];

            $user->save();
            $location->save();
    }

我似乎找不到我做错了什么。很明显,外键有问题

用户行需要对有效位置的引用。 保存用户之前,该位置必须可用。
因此,首先保存位置,然后保存用户并取消注释
$user->location\u id
行,就完成了

面对此错误的开发人员:

SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:
外键约束失败(
laravel
articles
,约束
articles\u user\u id\u foreign
外键(
user\u id
)引用
用户(
id
)在删除级联上)
(SQL:在
文章中插入
标题
用户id
正文
更新
创建
)值(rao,1,sflkkjk,2016-03-01 20:45:322016-03-01 20:45:32))
SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:
外键约束失败(
laravel
articles
,约束
articles\u user\u id\u foreign
外键(
user\u id
)引用
用户(
id
)在删除级联上)
(SQL:在
文章
标题
用户id
正文
更新
创建
)中插入值(rao,1,SFLKJK,2016-03-01 20:45:322016-03-01 20:45:32))

首先保存用户的用户记录,然后尝试插入记录,然后轻松插入数据库

关键点

两个表:一个是article,另一个是user。一个用户有很多文章,但没有一篇文章有很多用户。所以外键移向项目表。如果用户表没有记录,那么您将面临前面看到的相同错误


通过这样做,我们可以很容易地解决这个问题。

这很奇怪,但在我的例子中,在插入之前约束表中确实有行,但它仍然抛出这个错误。