как проверить что такая строка уже существует в БД laravel,

Сразу вставка идет в таблицу language_levels но а потом в profile_languages так вот получается что если такой самый (language_id от одного и того же profile_id передать он снова продублируется

введите сюда описание изображения

введите сюда описание изображения

foreach ($result as $resul){
                
                $language_level_id = DB::table('language_levels')->insertGetId(
                        ['language_id' => $language_id, 'level_id' => $level_id]);
                
                DB::table('profile_languages')->insert(
                    ['profile_id' => $profile_id, 'language_level_id' => $language_level_id]
                );
            }

есть идея но это не костыль будет?

1)зная profile_id получить все language_level_id которые пренадлежать данному профилю из таблицы profile_languages,
2)перебирая все id из language_levels и сравнивать language_id c с тем который мы хотим вставить и на сопадении его update если нет то вставить такую строку?

Спасибо


Ответы (2 шт):

Автор решения: radar4ick

Есть у Laravel такая замечательная функция как exists()

Пример использования:

DB::table('orders')->where('finalized', 1)->exists()

Возвращает true или false

→ Ссылка
Автор решения: doox911

Для того чтобы сохранить запись напишите следующее(на примере Request $request):

$language_level =  new LanguageLevel;

$language_level->level_id = $request->level_id;
$language_level->language_id = $request->language_id;

$language_level->save();

$profile_language = new ProfileLanguage;

$$profile_language->profile_id = $request->profile_id;
$profile_language->language_level_id = $language_level->id;
$profile_language-save();

Правильно разделять логику создания и обновления модели. Но если вам так хочется, то вот проверка:

Вам необходимо вытащить все языки профиля (приводил пример тут):

App\Profile::with('languages.language')->find($request->profil_id);

Затем в выборке найти необходимый язык. Если он есть, обновляем иначе создаём.

→ Ссылка