Laravel 5,8 проверить запись в базе данных, если существует не работает - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть таблица расписаний, и я хочу, чтобы в ней были дубликаты. Если пользователь помещает те же данные в форме, которая уже есть в базе данных, он не будет go до dd('exists'), кто-нибудь знает, в чем проблема?

Вот мое обновление

$schedule = Schedule::findOrFail($id);

$validate = Schedule::where('subject_code_id',$request->subject)
                    ->where('teacher_id',$request->teacher)
                    ->where('room_id',$request->room)
                    ->where('start_time',$request->start_time)
                    ->where('end_time',$request->end_time)
                    ->where('school_year',$request->schoolyr)
                    ->where('day',$request->days)
                    ->where('term',$request->term)
                    ->where('semester',$request->sem)
                    ->count();

if($validate == 1){
          dd('exist');
} else{
            $schedule->update($request->all());
}

попробовал dd($request->all()); Я получил

array:11 [
  "id" => 9
  "term" => "2"
  "semester" => "2"
  "start_time" => "10:30 PM"
  "end_time" => "12:30 AM"
  "scid" => 10
  "teacher_id" => 5
  "room_id" => 6
  "subject_code_id" => 9
  "day" => "SAT"
  "school_year" => "2020"
]

Ответы [ 4 ]

4 голосов
/ 15 февраля 2020

Вместо использования метода подсчета, чтобы определить, существуют ли какие-либо записи, которые соответствуют ограничениям вашего запроса, вы можете использовать методы exists и doesntExist:

$schedule = Schedule::findOrFail($id);

$validate = Schedule::where('subject_code_id',$request->subject)
                ->where('teacher_id',$request->teacher)
                ->where('room_id',$request->room)
                ->where('start_time',$request->start_time)
                ->where('end_time',$request->end_time)
                ->where('school_year',$request->schoolyr)
                ->where('day',$request->days)
                ->where('term',$request->term)
                ->where('semester',$request->sem)
                ->exists();

if($validate){
      dd('exist');
} else{
        $schedule->update($request->all());
}

Пожалуйста, посетите страницу, чтобы узнать подробности - агрегаты

2 голосов
/ 15 февраля 2020

Вы можете легко сделать это с laravel уникальной проверкой, используя класс Rule, как показано ниже

$this->validate($request, [
    'subject_code_id' => [
        Rule::unique('schedules')->where(function ($query) use($request) {
            return $query->where('teacher_id', $request->teacher); //you can add all conditions here
        }),
    ],
]);

, подробнее см. уникальные правила проверки здесь

1 голос
/ 15 февраля 2020

используйте first() метод вместо count()

$schedule = Schedule::findOrFail($id);

$validate = Schedule::where('subject_code_id',$request->subject)
                    ->where('teacher_id',$request->teacher)
                    ->where('room_id',$request->room)
                    ->where('start_time',$request->start_time)
                    ->where('end_time',$request->end_time)
                    ->where('school_year',$request->schoolyr)
                    ->where('day',$request->days)
                    ->where('term',$request->term)
                    ->where('semester',$request->sem)
                    ->first();

if($validate){
          dd('exist');
} else{
            $schedule->update($request->all());
}
0 голосов
/ 15 февраля 2020

используйте exists и напечатайте msg

$schedule = Schedule::findOrFail($id);

$validate = Schedule::where('subject_code_id',$request->subject)
                    ->where('teacher_id',$request->teacher)
                    ->where('room_id',$request->room)
                    ->where('start_time',$request->start_time)
                    ->where('end_time',$request->end_time)
                    ->where('school_year',$request->schoolyr)
                    ->where('day',$request->days)
                    ->where('term',$request->term)
                    ->where('semester',$request->sem)
                    ->exists();

//check $validate

if($validate){
       echo "data is already in databse";
} else{
       $schedule->update($request->all());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...