@YakushinIlya

Laravel ошибка добавление данных в связывающую таблицу?

Здравствуйте!
Не могу понять в чем ошибка. Есть таблицы такие как users, region, city и связывающие таблицы многие ко многим userregion, usercity. То есть, пользователь заполняя профиль выбирает регион, потом подгружаются города региона которые он также выбирает и сохраняет. Но при сохранении возникает вот такая ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`marketcarsdb`.`usercity`, CONSTRAINT `usercity_city_id_foreign` FOREIGN KEY (`city_id`) REFERENCES `city` (`old`)) (SQL: insert into `usercity` (`city_id`, `user_id`) values (3443, 1))


Возникает она именно на сохранении города, с регионами все нормально и все сохраняет как надо.
Пробовал уже копировать таблицу region и userregion и потом переименовывать все вместо region в city чтоб одинаковые таблицы были только со своими названиями. Также и с моделями проделал. Все идентично но ошибка почему то именно с сохранением города.

Вот скрины таблиц usercity и списка городов city (с регионами также)
5fc1ab0a3d767379231364.jpeg
5fc1ab12ab7df347448978.jpeg
5fc1ab187a525994694156.jpeg

Метод из модели city
public function user()
    {
        return $this->belongsToMany('App\User', 'usercity', 'city_id', 'user_id');
    }


Метод из модели user
public function city()
    {
        return $this->belongsToMany('App\Model\City', 'usercity', 'user_id', 'city_id');
    }


Сохранение данных при которых и происходит ошибка
$user = User::find($request->user()->id);
        $request['info'] = base64_encode($request['info']);
        $user->update($request->all());
        $user->country()->attach(1);
        $user->region()->attach($request->region);
        $user->city()->attach($request->city);
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kandrash
Кратко о себе
Вы что-то излишне намудрили с ключами. Внешний указывает на old поле, в связях вы его не используете.. Нужно выбросить половину бессмысленного кода и следовать соглашениям об именовании Laravel.
// Миграция users
$table->id();
$table->string('name');

// Миграция cities
$table->id();
$table->string('name');

// Миграция city_user
$table->foreignId('city_id')->constrained('cities');
$table->foreignId('user_id')->constrained('users');

// Модель User
public function cities()
{
    return $this->belongsToMany(City::class);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы