Preg_match_all во всех полях ввода

Я использую preg_match_all, чтобы найти имена пользователей в «теле» и сохранить их в базе данных. Как мне найти имена пользователей в нескольких полях ввода, например: тело, заголовок и статья? И как сохранить найденные ссылки в БД без сохранения дубликатов записей?

if ($post) {
            preg_match_all('/\B@(\w+)/', $request->get('body'), $mentionedUsers);

            foreach ($mentionedUsers[1] as $mentionedUser) {

            $foundUser = User::where('username', $mentionedUser)->first();
                if (!$foundUser){
                    continue;
                }
            $foundUserId = $foundUser->id;
            $mentionedUser_save = new Mentioned_post_user;
            $mentionedUser_save->user_id_lead = Auth::user()->id;
            $mentionedUser_save->user_id = $foundUserId;
            $mentionedUser_save->post_id = $post->id;
            $mentionedUser_save->save();

            }
        }

У вас есть пример того, что вы пытались сохранить из нескольких полей ввода? Используете ли вы красноречивые модели?

wheelmaker 11.05.2019 23:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать whereIn('user_name', $mentionedUsers) вместо запуска foreach.

if ($post) {
    // assuming this line works and mentioned users are in $mentionedUsers[1]
    preg_match_all('/\B@(\w+)/', $request->get('body'), $mentionedUsers);

    $foundUsers = User::whereIn('username', $mentionedUsers[1])->get();

    if ($foundUsers) {
        foreach ($foundUsers as $foundUser) {
            $foundUserId = $foundUser->id;
            $mentionedUser_save = new Mentioned_post_user;
            $mentionedUser_save->user_id_lead = Auth::user()->id;
            $mentionedUser_save->user_id = $foundUserId;
            $mentionedUser_save->post_id = $post->id;
            $mentionedUser_save->save();
         }
     }
}

В противном случае вам нужно будет получить уникальные значения $mentionedUsers[1] с array_unique(). (Я бы предложил решение выше)


Обновлено: извините, если ваша проблема была другой. Для вашего решения я бы использовал подход, объединяющий все входные данные.

$theString = "$request->body $request->title $request->article";

preg_match_all('/\B@(\w+)/', $theString, $mentionedUsers);    

$userNamesArray = array_unique($mentionedUsers[1]);

$foundUsers = User::whereIn('username', $userNamesArray)->get();

Как я могу применить функцию для нескольких столбцов из запроса? Ваш код работает только для «тела», он также должен работать с «заголовком» и «текстом статьи».

slickness 12.05.2019 10:47

@slickness Я добавил, как бы я это сделал, возможно, это можно сделать с лучшим подходом, но это то, что пришло мне в голову

senty 12.05.2019 15:05

Другие вопросы по теме