Нужны ли внешние ключи в БД при разработке на laravel?
Да, нужно указывать.не станет ли это проблемой в будущем
Наоборот, они помогут избежать проблем. Можно, конечно, и вручную все это прописывать, но зачем?Если все-таки нужно указывать внешние ключи в БД, помогите определиться какие действия ставить на ON DELETE или ON UPDATE, например для таблицы users и posts.
Зависит от типа связи.
Пример:
Профиль - настройки пользователя (предположим, что они хранятся в отдельной таблице). Без пользователя настройки не имеют смысла, поэтому их также нужно удалить при удалении юзера.
Публикации в блоге - пользователь. Здесь уже на выбор:
1. Можно запретить удаление пользователя, если у него есть хотя бы один пост
2. Удалить все посты юзера вместе с аккаунтом
[ Внимание, это моё мнение не претендующее на best practices ] Одна из прелестей Laravel, это довольно сильное абстрагирование от базы данных благодаря чудесному уровню абстракции QueryBuilder и Eloquent ORM, сегодня вы используете SQLite а завтра MySQL, а послезавтра решите использовать PostgreSQL и т.д. при этом вам не придётся ничего особо переделывать в приложении (при использовании моделей или QB без голых запросов).
По этому желательно не возлагать никакой логики на базу данных, все отношения (а так-же акцессоры и мутаторы, ассоциации) описываются в моделях и позволяют контролировать целостность данных средствами Laravel а не базы данных.