У меня есть в базе данных 2 таблицы, новости и история. История само собой выводится на главной странице.
Так вот у меня есть форма, я отправляю post запрос, и у меня должно добавлять одновременно в две базы данных, в историю и новости.
Как это реализовать более грамотно? Чтобы к примеру не писать вот так в одном контроллере:
public function addNews()
{
$history = new History;
$history->admin_id = Auth::user()->id;
$history->title = $request->title;
$history->action = "Добавил новость";
$history->url_address = "news/create";
$addNews = new News;
$addNews->author_id = Auth::user()->id;
$addNews->title = $request->title;
$addNews->description = $request->description;
...
То по моему мнению так не грамотно писать будет, так как не соответствует solid принципам.
1.Сразу предлагаю Вам вынести валидацию в отдельный класс, поскольку здесь Вы получаете все данные из $request, который сейчас даже нигде не описан. Примерно так:
public function addNews(StoreNewsRequest $request)
{
...
}
2.Историю лучше вести с привязкой через полиморфические связи. Таким образом, в БД всегда будет храниться история взаимодействий с данной новостью, а Вы сможете легко посмотреть, кто и что делал с этой новостью на протяжении всего времени. Больше про полиморфические связи в Eloquent здесь.
3.Писать в коде прямым текстом вот так: $history->action = "Добавил новость"; - зло. Лучше это вынести в константу модели History:
class History
{
const USER_ADDED_NEWS = "Добавил новость";
}
...
$history->action = History::USER_ADDED_NEWS;
В заключении посоветую почитать эти best practices, явно много нового и полезного для себя найдете :)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости