I know that this question has already been asked, but I still can’t find what I’m doing wrong.
I’m using the framework Laravel.
I have 2 tables (Users and Locations). When I want to create a User, I get the error message:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails
(festival_aid
.users
, CONSTRAINTfk_users_locations1
FOREIGN KEY
(location_id
) REFERENCESlocations
(location_id
) ON DELETE
CASCADE ON UPDATE NO ACTION) (SQL: insert intousers
(user_id
,
user_email
,location_id
) values (?, ?, ?)) (Bindings: array ( 0 =>
‘1’, 1 => ‘[email protected]’, 2 => ‘1’, ))
Table Users
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;
Table Locations
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;
Migration User
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');
});
}
Migration Location
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');
});
}
Model User
public function location()
{
return $this->belongsTo('Location');
}
Model Location
public function user()
{
return $this->hasOne('User');
}
Controller
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();
}
I can’t seem to find what I’m doing wrong. Obviously there is something wrong with the foreign key.
A user row needs a reference to a valid location.
That location must be available before the user is saved.
So, first save the location and then save the user and uncomment the $user->location_id
line and you are done.
Answer:
Those Developers who face this error:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:
a foreign key constraint fails (laravel
.articles
, CONSTRAINTarticles_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
) ON DELETE CASCADE)
(SQL: insert intoarticles
(title
,user_id
,body
,updated_at
,created_at
) values (rao, 1, sflkkjk, 2016-03-01 20:45:32, 2016-03-01 20:45:32))
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:
a foreign key constraint fails (laravel
.articles
, CONSTRAINTarticles_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
) ON DELETE CASCADE)
(SQL: insert intoarticles
(title
,user_id
,body
,updated_at
,created_at
) values (rao, 1, sflkkjk, 2016-03-01 20:45:32, 2016-03-01 20:45:32))
First Save the user record of user then try to insert record then easily inserted into the database.
KEY POINT
Two Tables: one is article and other is user. A user has many articles but no article has many users. So foreign key is shifted toward the article table. If user table has no record then you face the same error seen earlier.
By doing this we can easily solve this issue.
Tags: date, laravel, php, phplaravel, sql