Задать вопрос

Как связь hasMany удалить?

Немного не пойму как удалить hasMany связь. У меня есть таблица branch и room. То есть один филиал имеет несколько комнат. Пробовал в документации найти но пока что ничего толком не нашел если только foreach не перебирать все и удалять записи
Вот что за ошибка выходит
"SQLSTATE[23503]: Foreign key violation: 7 ОШИБКА: UPDATE или DELETE в таблице "branch" нарушает ограничение внешнего ключа "room_branch_id_foreign" таблицы "room"
DETAIL: На ключ (id)=(4) всё ещё есть ссылки в таблице "room". (SQL: delete from "branch" where "id" = 4)"

В контроллере
public function destroy($id)
    {
        return Branch::destroy($id);
    }

В моделе
class Branch extends Model
{
    protected $table = 'branch';
    protected $dateFormat = 'U';
    protected $fillable = ['name', 'city', 'street', 'build', 'appartament', 'phone', 'user_id'];

    public function rooms()
    {
        return $this->hasMany('Growth\Room');
    }
}


Есть конечно вот такой пример сделать
public function destroy($id)
    {
        $branch = Branch::find($id)->rooms();
        $branch->delete();
        return Branch::destroy($id);
    }

Или я неправильно понимаю в удаление связанных таблицах?
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@Yan-s
У вас отправляется запрос на удаление, но удаление не возможно, поскольку в БД есть записи ссылающиеся на эту внешним ключом.

Вам надо либо сперва удалить из бд ссылающиеся записи на удаляемую, либо обозначить в БД поведение при удалении такой записи. Например, при on delete cascade записи ссылающиеся на удаляемую будут автоматически удалены самой БД.

Гуглите mysql on delete
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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