Проверка поля данных базы данных перед вставкой данных

У меня есть данные с HTML-страницы. И я хочу проверить, существуют ли уже дата и значения места. Если они существуют, он должен выдать ошибку, говорящую, что данные уже присутствуют, если этих данных даты и места нет, это должно позволить пользователю сохранить их.

Вот код, который я написал для его сохранения,

public function StoreSampling(Request $request)
{
  $date = Carbon::createFromFormat('d-m-Y', $request->input('date'))->format('Y-m-d');

  $doctorname = Input::get('doctorselected');
  $product = Input::get('product');
  $product= implode(',', $product);
  $quantity = Input::get('qty');
  $quantity =implode(',',$quantity);
  $representativeid = Input::get('representativeid');
  //Store all the parameters.
  $samplingOrder = new   SamplingOrder();
  $samplingOrder->date = $date;
  $samplingOrder->doctorselected = $doctorname;
  $samplingOrder->products = $product;
  $samplingOrder->quantity = $quantity;
  $samplingOrder->representativeid = $representativeid;
  $samplingOrder->save();
  return redirect()->back()->with('success',true);
}

Я просмотрел несколько страниц в стеке. И наткнулся на обнаружение существования по ID. А вот и образец,

$count = DB::table('teammembersall')
    ->where('TeamId', $teamNameSelectBoxInTeamMembers)
    ->where('UserId', $userNameSelectBoxInTeamMembers)
    ->count();

if ($count > 0){
    // This user already in a team
    //send error message
} else {
    DB::table('teammembersall')->insert($data);
}

Но я хочу сравнить дату и место. И если их нет, я хочу позволить пользователю сохранить его. В основном пытаюсь остановить повторяющиеся записи.

Пожалуйста, помогите мне с этим.

И что именно вам мешает адаптировать приведенный вами пример? $count = DB::table('SamplingOrder')->where('date', $date)->where('place', $place)

Boris Schegolev 21.11.2018 15:51

Уточните свой вопрос, так как атрибут place нигде не упоминается.

Yahya Uddin 21.11.2018 16:06

@YahyaUddin: Ага, Bymistake добавил еще один метод из контроллера. Получил это решено. Спасибо, что изучили это

Nagendra Bhat 21.11.2018 18:02
Стоит ли изучать 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
3
116
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вам нужно изменить свой запрос примерно так:

$userAlreadyInTeam = SamplingOrder::where('date', $date)
    ->where('place', $place) // I'm not sure what the attribute name is for this as not mentioned in question
    // any other conditions
    ->exists();

if (userAlreadyInTeam) {
    // Handle error
} else {
    // Create
}

Вам не нужно использовать count() как единственную попытку определить существование.

Также рассмотрите возможность добавления в вашу базу данных атрибута unique с несколькими столбцами, чтобы гарантировать, что у вас нет члена с такими же данными и местом.

Спасибо за самый простой ответ. Выберите это среди всех остальных. Спасибо, что нашли время для разрешения. Решил мое требование.

Nagendra Bhat 21.11.2018 18:04

@NagendraBhat Пожалуйста, отметьте этот ответ как правильный, если это решило вашу проблему

Yahya Uddin 21.11.2018 18:08

Ага. Спасибо за помощь

Nagendra Bhat 21.11.2018 18:21

Для этого есть очень хорошие вспомогательные функции, называемые firstOrNew и firstOrCreate, последняя создаст ее напрямую, а первую вам нужно будет явно вызвать save. Поэтому я бы сказал следующее:

$order = SamplingOrder::firstOrNew([
  'date' => $date,
  'place' => $place 
], [
   'doctorname'       => Input::get('doctorselected'),
   'product'          => implode(',', Input::get('product')),
   'quantity'         => implode(',',Input::get('qty')),
   'representativeid' => Input::get('representativeid')
]);

if ($order->exists()) {
   // throw error
   return;
}

$order->save();
// success

Спасибо, что нашли время для разрешения. Решил мое требование.

Nagendra Bhat 21.11.2018 18:03

Лучше всего использовать уникальная проверка laravel для нескольких столбцов. Взгляните на это. Я предполагаю, что id - ваш первичный ключ в таблице sampling_orders. Правило проверки выглядит так:

'date' => ['unique:sampling_orders,date,'.$date.',NULL,id,place,'.$place]

p.s: Я не вижу ввода place в вашем StoreSampling()

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