Я использую 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();
}
}






Вы можете использовать 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 Я добавил, как бы я это сделал, возможно, это можно сделать с лучшим подходом, но это то, что пришло мне в голову
У вас есть пример того, что вы пытались сохранить из нескольких полей ввода? Используете ли вы красноречивые модели?