Я сталкиваюсь с проблемой отношения «многие ко многим», когда пытаюсь сохранить данные в промежуточную таблицу. По сути, клиент имеет много наблюдений, и у меня есть tbl_cients
, clients_hasmany_observations
и tbl_clients_observations
.
Иностранные ключи в миграциях:
Schema::connection('dev')->table('clients_hasMany_observations', function (Blueprint $table) {
$table->foreign('client_id')->references('client_id')->on('tbl_clients');
$table->foreign('observation_id')->references('observation_id')->on('tbl_clients_observations');
});
Модель клиентов:
/**
* The observations that belong to the client.
*/
public function observations()
{
return $this->belongsToMany('App\ClientsObservations', 'clients_hasmany_observations', 'client_id', 'observation_id')->withTimestamps();
}
Модель наблюдений:
/**
* The observations that belong to the client.
*/
public function clients()
{
return $this->belongsToMany('App\Clients', 'clients_hasmany_observations', 'client_id', 'observation_id')->withTimestamps();
}
Принимая это, если я пытаюсь добавить нового клиента и прикрепить фиктивное наблюдение, я получаю ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (helderne_dev
. clients_hasmany_observations
, CONSTRAINT clients_hasmany_observations_observation_id_foreign
FOREIGN KEY (observation_id
) ССЫЛКИ tbl_clients_observations
(observati) (SQL: insert into
Clients_hasmany_observations (
client_id ,
create_at ,
наблюдение_id ,
updated_at`) значения (4, 2020-04-15 11:05:09, 50, 2020-04-15 11:05:09)) `` `
Я не могу понять почему, потому что я добавил ключи. Мы будем благодарны за любую помощь!
EDIT # 1 В контроллере, который я пишу,
$new_client = Clients::create($request->all());
$new_client->observations()->attach([50]);
dd($new_client);
50 будет возможным идентификатором наблюдения в tbl_clients_observations.