У меня есть форма со следующими полями: имя, полное имя, описание, адрес электронной почты, пароль, состояние, город (заполняется через Ajax при выборе состояния) и фотографии (a загрузка изображения). Вот моя схема:Laravel 5: SQLSTATE [23000]: Нарушение ограничения целостности
public function up()
{
Schema::create('states', function(Blueprint $table)
{
$table->increments('id');
$table->string('acronym');
$table->string('name');
});
Schema::create('cities', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->integer('state_id')->unsigned();
$table->foreign('state_id')->references('id')->on('states');
});
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('fullname');
$table->string('photo');
$table->text('description');
$table->string('email');
$table->string('password', 60);
$table->integer('city_id')->unsigned();
$table->foreign('city_id')->references('id')->on('cities');
$table->rememberToken();
});
}
Моя проблема заключается в том, что при нажатии на кнопку отправки, появляется следующее сообщение об ошибке:
SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку : ограничение внешнего ключа не удается (. yearbook
users
, скованность users_city_id_foreign
FOREIGN KEY (city_id
) Лит cities
(id
)) (SQL: вставить в users
(name
, description
, email
) значения (Gabriel, описание, [email protected]))
Таким образом, проблема связана с тем, что city_id является внешним ключом (атрибут «значение» из опции в форме - это идентификатор). Fro пример:
<option value="281">Abaíra</option>
Но когда я пытаюсь вставить через phpmyadmin, он вставляет без ошибок.
И что может быть проблемой?
Вот мой метод экономии на контроллере:
public function saveRegister()
{
$rules = array(
'name' => 'required',
'description' => 'required',
'fullname' => 'required',
'email' => 'required',
'password' => 'required',
'state' => 'required',
'city' => 'required',
'photo' => 'required',
'photo' => 'image|max:3000000',
);
$val = \Validator::make(\Input::all(), $rules);
if($validar->fails()){
return redirect('register')->withErrors($val);
} else {
$user = new User(array(
'name' => \Input::get('name'),
'description' => \Input::get('description'),
'fullname' => \Input::get('fullname'),
'email' => \Input::get('email'),
'city_id' => \Input::get('city'),
));
$user->timestamps = false;
$user->save();
return redirect('register')->with('message', 'User saved!');
}
}
Edit: фиксированная CITY_ID на saveRegister() метод.
Вы ' город_ id' в таблице 'users', но в вашем коде вместо этого используется' city'. –
Вы правы, но я исправил и до сих пор получаю ошибку. – Gabriel