Вы можете использовать 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();